{
  "data": {
    "a": {
      "slug": "dotcms",
      "name": "dotCMS",
      "vendor": "dotCMS LLC",
      "vendorUrl": "https://www.dotcms.com",
      "kind": "mcp",
      "category": "cms",
      "summary": "dotCMS is an enterprise CMS with headless REST APIs, workflows and push publishing, run as dotCMS Cloud or self-hosted. Agents use the @dotcms/mcp-server package, which searches the instance's OpenAPI spec and runs API calls in a sandbox.",
      "url": "https://www.anchorterminal.com/tools/dotcms",
      "markdownUrl": "https://www.anchorterminal.com/tools/dotcms.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/dotcms.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dotcms.json",
      "dns": "dotcms.grade.anchorterminal.com",
      "repo": "https://github.com/dotCMS/core",
      "license": "BUSL-1.1",
      "transports": [
        "stdio"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "@dotcms/mcp-server"
        }
      ],
      "auth": "api-key",
      "authNotes": "The MCP server reads DOTCMS_URL and AUTH_TOKEN. API tokens are JWTs issued for a dotCMS user, carry that user's role permissions, take an expiry in days, and are created by administrators in the user manager or through /api/v1/authentication/api-token. The docs recommend a separate user and role per application; the MCP server needs write permission for content types, content and workflows. Tokens are injected outside the sandbox, so sandboxed code never sees them.",
      "pricing": "freemium",
      "pricingNotes": "dotCMS is free with every capability for companies under $5 million in revenue under its BSL licence, self-hosted. Cloud plans (Starter, Professional, Business, Enterprise) are priced on request, with monthly request and bandwidth allowances and SLAs of 99.5 to 99.9 per cent.",
      "priceSummary": "Freemium",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the MCP README, the dev docs or the pricing page (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 7,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 43,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://dev.dotcms.com/docs/build/integrations/dotai/mcp-server",
      "llmsTxt": "https://dev.dotcms.com/llms.txt",
      "capabilities": [
        "cms.content",
        "cms.publish",
        "cms.assets",
        "cms.schema",
        "cms.localisation"
      ],
      "tags": [
        "official",
        "mcp",
        "stdio",
        "self-hosted",
        "hosted",
        "source-available",
        "llms-txt",
        "sales-led",
        "sla",
        "typescript"
      ],
      "lastRelease": "2026-09-02",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57.7,
        "grade": "C",
        "agentReady": false,
        "rank": 780,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 12,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 68,
          "maintenance": 75,
          "payments": 35,
          "reliability": 47,
          "schema": 65,
          "security": 63,
          "transparency": 54
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "dotCMS's MCP server keeps the tool list to seven by letting the agent search the instance's OpenAPI spec and run API calls in a sandbox that never sees the token. It is a pre-1.0 package that needs a write token, and cloud prices are on request.",
        "bestFor": "Enterprises already on dotCMS who want an agent to manage content and pages.",
        "strengths": [
          "Seven tools in code mode, with the instance's OpenAPI spec searchable from the sandbox",
          "The API token stays outside the sandbox, which only receives results",
          "JWT tokens per user with role permissions and an expiry",
          "security.txt with PGP, a bounty-backed disclosure policy and LTS security backports",
          "Free with every capability for organisations under $5 million in revenue"
        ],
        "weaknesses": [
          "Pre-1.0 package, with the dev docs still pointing at the beta tag",
          "The server needs a token with write permission for content types, content and workflows",
          "execute can call any endpoint, and no read-only mode or annotations were found",
          "Cloud prices are on request only",
          "Source-available under the BSL, not an OSI licence"
        ],
        "agentNotes": [
          "Search the spec with `search` before writing an `execute` call, and return only the fields you need",
          "Use a token for a dedicated user and role, not an administrator's",
          "Confirm with the user before execute calls that publish, archive or delete content",
          "Keep results small with pick and first, since output is capped at about 25,000 characters",
          "Use download_assets for theme folders so files land on disk instead of in context"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57.7
          }
        ],
        "editorialScores": {
          "ergonomics": 68,
          "maintenance": 75,
          "payments": 35,
          "reliability": 47,
          "schema": 65,
          "security": 63,
          "transparency": 51
        },
        "provenanceScore": 57,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npx -y @dotcms/mcp-server",
        "config": {
          "mcpServers": {
            "dotcms": {
              "args": [
                "-y",
                "@dotcms/mcp-server"
              ],
              "command": "npx",
              "env": {
                "AUTH_TOKEN": "your-api-token",
                "DOTCMS_URL": "https://your-dotcms-instance.com"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/cms.content",
        "tool": "https://letme.dev/dotcms"
      },
      "area": "business",
      "provenance": {
        "legalEntity": "dotCMS LLC",
        "domain": "dotcms.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": false,
        "terms": "https://github.com/dotCMS/core/blob/main/LICENSE",
        "privacy": "https://dev.dotcms.com/docs/manage/access-and-security/security-and-privacy/privacy-policy",
        "statusPage": "",
        "changelog": "https://dev.dotcms.com/docs/reference/releases/product-versions/changelogs",
        "securityTxt": "valid",
        "checked": "2026-11-06",
        "notes": [
          "The MCP server runs locally and calls the customer's own dotCMS instance, so the endpoint isn't on a dotCMS domain.",
          "The privacy policy, last updated 8 September 2026, covers dotCMS's websites only and names dotCMS Holdings, LLC, dotCMS Services LLC and dotCMS LLC.",
          "www.dotcms.com/robots.txt disallows /docs/ and /utils/; dev.dotcms.com allows all with Content-Signal ai-train=yes, search=yes, ai-input=yes.",
          "www.dotcms.com/terms-of-service and /privacy-policy returned 404; no cloud terms of service were found, so the licence stands in for terms.",
          "No status page answered (status.dotcms.com refused the connection)."
        ],
        "score": 57
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/dotcms.json",
      "live": {
        "slug": "dotcms",
        "versions": [
          {
            "registry": "github",
            "name": "dotCMS/core",
            "version": "dotcms-cli-26.11.06-03",
            "released": "2026-11-06",
            "seenAt": "2026-11-06T23:22:22.409374032Z"
          },
          {
            "registry": "npm",
            "name": "@dotcms/mcp-server",
            "version": "0.1.1",
            "seenAt": "2026-11-06T23:22:21.577680774Z"
          }
        ],
        "githubStars": 971,
        "npmWeekly": 43,
        "securityTxt": {
          "url": "https://dotcms.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-06-09T23:59:59.000Z",
          "checkedAt": "2026-11-07T16:00:46.289271049Z"
        },
        "llmsTxt": {
          "url": "https://dev.dotcms.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:19.058875451Z"
        },
        "pages": [
          {
            "url": "https://dev.dotcms.com/docs/reference/releases/product-versions/changelogs",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:02:43.439634709Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "14706a7e3d20"
          },
          {
            "url": "https://dev.dotcms.com/docs/manage/access-and-security/security-and-privacy/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:02:39.904485204Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b8fe703d4258"
          },
          {
            "url": "https://raw.githubusercontent.com/dotCMS/core/main/LICENSE",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:20:41.976083247Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1dd3baa6b46f"
          }
        ],
        "updatedAt": "2026-11-07T16:00:46.289271049Z"
      }
    },
    "answer": "WordPress scores 58.8 (C) on agent readiness against dotCMS's 57.7 (C), and leads in 5 of 7 scored categories.",
    "b": {
      "slug": "wordpress",
      "name": "WordPress",
      "vendor": "WordPress.org (open-source project)",
      "vendorUrl": "https://wordpress.org",
      "kind": "http-api",
      "category": "cms",
      "summary": "WordPress is an open-source content management system that its owner hosts. Agents create, revise and publish posts, pages and media through the built-in REST API, WP-CLI or the MCP Adapter, a canonical plugin in the WordPress.org directory.",
      "url": "https://www.anchorterminal.com/tools/wordpress",
      "markdownUrl": "https://www.anchorterminal.com/tools/wordpress.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/wordpress.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/wordpress.json",
      "dns": "wordpress.grade.anchorterminal.com",
      "repo": "https://github.com/WordPress/wordpress-develop",
      "license": "GPL-2.0-or-later. The MCP Adapter plugin is GPL-2.0-or-later too",
      "transports": [
        "http",
        "stdio"
      ],
      "packages": [],
      "auth": "api-key",
      "authNotes": "Self-serve on your own site, with no app review or approval by WordPress.org. A user creates an Application Password on their profile, through `/wp/v2/users/\u003cid\u003e/application-passwords` or with `wp user application-password create`, and the agent sends it as Basic auth over HTTPS. A password has no scopes or expiry and carries every capability of its user, so access is set by the user's role. Each password can be revoked on its own. The MCP Adapter's HTTP transport takes the same credential, and its STDIO transport runs as the user named in `--user`.",
      "pricing": "free",
      "pricingNotes": "Free software with nothing to buy from WordPress.org, so an agent can start without a contract or a card. The owner pays for their own hosting. WordPress.com and other hosts sell hosted WordPress under their own prices, which aren't graded here (checked 2026-10-08).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the REST API handbook, wordpress.org/llms.txt or the core and MCP Adapter repositories (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 21460,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developer.wordpress.org/rest-api/",
      "llmsTxt": "https://wordpress.org/llms.txt",
      "capabilities": [
        "cms.content",
        "cms.publish",
        "cms.assets"
      ],
      "tags": [
        "open-source",
        "self-hosted",
        "rest",
        "mcp",
        "cli",
        "php",
        "llms-txt",
        "security-txt",
        "bug-bounty"
      ],
      "lastRelease": "2026-10-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 58.8,
        "grade": "C",
        "agentReady": false,
        "rank": 723,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 10,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 74,
          "maintenance": 83,
          "payments": 60,
          "reliability": 78,
          "schema": 65,
          "security": 62,
          "transparency": 69
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-02"
        },
        "negative": -11,
        "negativeNotes": [
          "Advisories in WordPress core in the last 12 months, counted per advisory. CVE-2026-87902 (GHSA-7hp8-65ch-5whp, CVSS 8.1 High, called critical in the release post), unauthenticated local file inclusion through page-template resolution that can reach remote code execution, fixed in 7.1.2 on 22 September 2026, under two months old (2). CVE-2026-63030 (GHSA-ff9f-jf42-662q, 9.8 Critical, REST API batch-route confusion leading to SQL injection and remote code execution, fixed in 7.0.2 in July 2026) (1). CVE-2026-60137 (GHSA-fpp7-x2x2-2mjf, 5.9 Medium, SQL injection through `author__not_in`, fixed in 7.0.2, published by the project) (1). CVE-2026-64638 (8.9 High, pre-auth reflected XSS on the login screen, fixed in 7.0.3, published 7 August 2026) (1). CVE-2026-65640 (8.8 High, remote code execution through a PostScript upload by an Author, fixed in 7.0.4, published 17 August 2026) (1). CVE-2026-119977 (8.1 High, filed by Wordfence on 31 October 2026, unauthenticated code execution through predictable staging paths during a full core upgrade, versions 4.7 through 7.1.3, fixed in 7.1.4 on 28 October 2026), under two months old (2). CVE-2026-3906 (4.3 Medium, filed by Wordfence, note creation by Subscribers, fixed in 6.9.2) and CVE-2026-114570 (4.9 Medium, filed by Wordfence on 22 October 2026, stored XSS through Quick Edit, fixed in 7.0.3) are third-party records of fixed Mediums with no advisory from the project (0 each). CISA's Known Exploited Vulnerabilities catalogue lists CVE-2026-87902 (added 25 September 2026), CVE-2026-63030 and CVE-2026-60137 (added 21 July 2026). All are fixed and backported to 4.7. Total 8. https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-87902 ; https://wordpress.org/news/2026/09/wordpress-7-1-2-release/ ; https://wordpress.org/news/2026/08/wordpress-7-0-4-release/ ; https://services.nvd.nist.gov/rest/json/cves/2.0?keywordSearch=WordPress%20core\u0026keywordExactMatch\u0026pubStartDate=2026-10-25T00:00:00.000\u0026pubEndDate=2026-11-02T23:59:59.999",
          "17 September, 6 October and 28 October 2026. 7.1.1, 7.1.3 and 7.1.4 fixed flaws their release posts describe (7.1.4 alone lists several stored XSS issues, unpublished customizer changesets readable without login and notes readable by users without edit access), and none of the 7.1 branch commits or the posts cite a CVE or GHSA identifier. The 7.1.4 upgrade-window flaw now has a Wordfence record and is counted with the advisories above, not here. Most fixes in 6.9.2 (10 March 2026) and 7.0.3 (6 August 2026) were also described only in their posts, and fold into the same term. Release prose isn't an advisory, so one folded term (3). https://wordpress.org/news/2026/10/wordpress-7-1-4/ ; https://wordpress.org/news/2026/10/wordpress-7-1-3-maintenance-and-security-release/"
        ],
        "verdict": "The REST API is part of core, and a post created without a status is saved as a draft with revisions kept on the owner's server. Application Passwords carry no scopes, so limits come only from the user's role. Three core flaws fixed since July 2026 are on CISA's exploited list, and 7.1.4 shipped 12 security fixes on 28 October.",
        "bestFor": "Sites that already run WordPress, where an agent drafts posts and uploads media under a Contributor or Author account and a person publishes.",
        "strengths": [
          "Posts created without `status` are saved as drafts, and DELETE moves a post to the Trash unless `force=true` is passed",
          "Every REST or WP-CLI update to a post writes a revision that `/wp/v2/posts/\u003cid\u003e/revisions` lists with author and date",
          "`_fields` trims responses down to nested properties, with `per_page` up to 100 and X-WP-Total headers on every list",
          "Seven stable releases between 6 August and 28 October 2026, and security fixes backported to 4.7",
          "GPL-2.0-or-later, free to self-host, with a valid security.txt and a HackerOne programme for core"
        ],
        "weaknesses": [
          "Application Passwords have no scopes or expiry. Each one carries every capability of its user",
          "The revisions route supports GET and DELETE only, so a rollback means writing the old content back as a new update",
          "Core has no rate limit, no idempotency keys and no log of API calls beyond revisions and a password's last use",
          "CISA lists three core flaws as exploited, among them CVE-2026-87902, fixed in 7.1.2 on 22 September 2026, which allowed remote code execution under certain conditions",
          "No published OpenAPI file. Each site describes its own routes at `/wp-json`, and core has no content localisation"
        ],
        "agentNotes": [
          "Ask the owner for a dedicated user with the lowest role that fits. A Contributor can draft and edit its own posts but can't publish them",
          "Send the Application Password as Basic auth over HTTPS only. For the MCP Adapter, put it in an `Authorization` header to /wp-json/mcp/mcp-adapter-default-server, since there is no OAuth sign-in",
          "Upload a file with POST `/wp-json/wp/v2/media` first, then set `featured_media` or reference the returned URL in the post content",
          "To roll back, GET `/wp/v2/posts/\u003cid\u003e/revisions/\u003crev\u003e?context=edit` and POST its title and content to the post. There's no restore route",
          "Pass `_fields=id,status,link,modified` on lists and read X-WP-TotalPages. `per_page` stops at 100",
          "Check the site runs 7.1.4 or later before writing to it. Three core flaws fixed since July 2026 are known to be exploited"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 58.8
          }
        ],
        "editorialScores": {
          "ergonomics": 74,
          "maintenance": 83,
          "payments": 60,
          "reliability": 78,
          "schema": 65,
          "security": 62,
          "transparency": 72
        },
        "provenanceScore": 65,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-02",
            "maintenance": "2026-11-02",
            "payments": "2026-11-02",
            "reliability": "2026-11-02",
            "schema": "2026-11-02",
            "security": "2026-11-02",
            "transparency": "2026-11-02"
          },
          "last": "2026-11-02",
          "lastMoved": "2026-11-02",
          "oldest": "2026-11-02",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "wp core download \u0026\u0026 wp core install --url=\u003curl\u003e --title=\u003ctitle\u003e --admin_user=\u003cuser\u003e --admin_email=\u003cemail\u003e",
        "http": "curl --user \"USERNAME:PASSWORD\" https://HOSTNAME/wp-json/wp/v2/users?context=edit",
        "claudeCode": "claude mcp add --transport http my-wordpress-site https://example.com/wp-json/mcp/mcp-adapter-default-server --header \"Authorization: Basic PASTE_THE_BASE64_HERE\"",
        "config": {
          "mcpServers": {
            "wordpress": {
              "args": [
                "--path=/path/to/your/wordpress/site",
                "mcp-adapter",
                "serve",
                "--server=mcp-adapter-default-server",
                "--user=admin"
              ],
              "command": "wp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/cms.content",
        "tool": "https://letme.dev/wordpress"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "WordPress, self-hosted",
          "unit": "month",
          "usd": 0,
          "note": "GPL, you pay for your own hosting"
        }
      ],
      "provenance": {
        "legalEntity": "WordPress.org, an open-source project. The WordPress trademark belongs to the WordPress Foundation",
        "domain": "wordpress.org",
        "domainRegistered": "2003-03-28",
        "endpointOnVendorDomain": false,
        "terms": "",
        "privacy": "https://wordpress.org/about/privacy/",
        "statusPage": "",
        "changelog": "https://wordpress.org/news/category/releases/",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "No terms of service govern the software. It is licensed under GPL version 2 or later, and no service agreement or API terms were found, so `terms` is left out.",
          "The privacy policy covers the WordPress.org websites and names api.wordpress.org, the service installations call to check for updates. It names no company, and gives dpo@wordpress.org as the contact. It doesn't cover content held on a self-hosted site.",
          "The REST API answers on each owner's own domain.",
          "https://wordpress.org/.well-known/security.txt returned 200 with Contact https://hackerone.com/wordpress and Expires 2027-06-30.",
          "RDAP for wordpress.org gives a registration date of 2003-03-28.",
          "The make.wordpress.org footer says the WordPress trademark is the intellectual property of the WordPress Foundation. `license.txt` gives copyright to the contributors.",
          "No status page applies to self-hosted software."
        ],
        "score": 65
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/wordpress.json",
      "live": {
        "slug": "wordpress",
        "githubStars": 3505,
        "securityTxt": {
          "url": "https://wordpress.org/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-06-30T15:00:00.000Z",
          "checkedAt": "2026-11-07T15:59:42.224004236Z"
        },
        "llmsTxt": {
          "url": "https://wordpress.org/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:34:23.686573245Z"
        },
        "domain": {
          "domain": "wordpress.org",
          "registered": "2003-03-28",
          "source": "https://rdap.publicinterestregistry.org/rdap/domain/wordpress.org",
          "checkedAt": "2026-11-01T14:22:30.271426867Z"
        },
        "pages": [
          {
            "url": "https://wordpress.org/news/category/releases/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:24:05.147954844Z",
            "changedAt": "2026-11-04T08:36:28.182060093Z",
            "fingerprint": "274eab3b5410"
          },
          {
            "url": "https://wordpress.org/about/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:24:02.394392909Z",
            "changedAt": "2026-10-14T21:09:37.555180449Z",
            "fingerprint": "89f04a047363"
          }
        ],
        "github": {
          "repo": "wordpress/wordpress-develop",
          "checkedAt": "2026-11-02T09:39:02.673874342Z",
          "stars": 3501,
          "archived": false,
          "issuesEnabled": false,
          "pushedAt": "2026-11-01T23:50:09Z",
          "openIssues": 0,
          "openPRs": 3502,
          "issuesOpened90d": 0,
          "issuesClosed90d": 0,
          "prsMerged90d": 0,
          "ci": {
            "branch": "trunk",
            "runs": 50,
            "success": 50,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-11-01T23:50:22Z"
          },
          "advisories": [
            {
              "ghsa": "GHSA-4w3m-c66w-69mg",
              "severity": "low",
              "published": "2026-10-29T19:12:01Z"
            },
            {
              "ghsa": "GHSA-p2r6-rwjp-phv3",
              "severity": "medium",
              "published": "2026-10-29T19:10:17Z"
            },
            {
              "ghsa": "GHSA-vchg-92fx-636p",
              "severity": "low",
              "published": "2026-10-29T19:08:53Z"
            },
            {
              "ghsa": "GHSA-mqjw-vvgg-xfvf",
              "severity": "low",
              "published": "2026-10-29T19:08:30Z"
            },
            {
              "ghsa": "GHSA-j3rg-rwgx-7wx7",
              "severity": "low",
              "published": "2026-10-29T19:08:09Z"
            },
            {
              "ghsa": "GHSA-9vrg-x932-q57q",
              "severity": "medium",
              "published": "2026-10-29T19:05:06Z"
            },
            {
              "ghsa": "GHSA-j255-3x8q-7q7g",
              "severity": "medium",
              "published": "2026-10-29T19:03:53Z"
            },
            {
              "ghsa": "GHSA-wjwj-p342-9fq7",
              "severity": "medium",
              "published": "2026-10-29T19:03:31Z"
            },
            {
              "ghsa": "GHSA-7q86-3j97-744j",
              "severity": "medium",
              "published": "2026-10-29T19:02:55Z"
            },
            {
              "ghsa": "GHSA-2p22-wv7j-cvfv",
              "severity": "medium",
              "published": "2026-10-29T19:02:35Z"
            },
            {
              "ghsa": "GHSA-83c2-c4pc-wmp3",
              "severity": "high",
              "published": "2026-10-29T19:00:39Z"
            },
            {
              "ghsa": "GHSA-7hp8-65ch-5whp",
              "cve": "CVE-2026-87902",
              "severity": "critical",
              "published": "2026-09-22T13:57:27Z"
            },
            {
              "ghsa": "GHSA-rmpv-w5v9-rqh5",
              "severity": "low",
              "published": "2026-09-18T18:12:46Z"
            },
            {
              "ghsa": "GHSA-76jg-r2qr-v77f",
              "severity": "medium",
              "published": "2026-09-18T17:59:57Z"
            },
            {
              "ghsa": "GHSA-5qf7-2r5p-ppj8",
              "severity": "medium",
              "published": "2026-09-18T17:59:48Z"
            },
            {
              "ghsa": "GHSA-mgvw-845h-9qgq",
              "severity": "low",
              "published": "2026-09-18T17:59:36Z"
            },
            {
              "ghsa": "GHSA-xhp5-863h-rhfr",
              "severity": "medium",
              "published": "2026-09-18T17:59:30Z"
            },
            {
              "ghsa": "GHSA-w57f-v787-qhpf",
              "severity": "medium",
              "published": "2026-09-18T17:59:19Z"
            },
            {
              "ghsa": "GHSA-qg7r-fjh2-wvx8",
              "severity": "high",
              "published": "2026-09-18T17:58:59Z"
            },
            {
              "ghsa": "GHSA-f522-h982-63mg",
              "severity": "low",
              "published": "2026-09-18T17:58:47Z"
            },
            {
              "ghsa": "GHSA-cjfg-q57r-mq45",
              "severity": "medium",
              "published": "2026-09-18T17:57:32Z"
            },
            {
              "ghsa": "GHSA-33wf-p63q-w25f",
              "severity": "medium",
              "published": "2026-09-18T17:57:08Z"
            },
            {
              "ghsa": "GHSA-32m5-wc28-ghrr",
              "severity": "medium",
              "published": "2026-09-18T17:56:14Z"
            },
            {
              "ghsa": "GHSA-8vr3-7mxf-gx8w",
              "cve": "CVE-2026-65640",
              "severity": "high",
              "published": "2026-08-12T14:44:42Z"
            },
            {
              "ghsa": "GHSA-52p2-r8wf-jcrf",
              "cve": "CVE-2026-64638",
              "severity": "high",
              "published": "2026-08-06T18:54:17Z"
            },
            {
              "ghsa": "GHSA-fpp7-x2x2-2mjf",
              "cve": "CVE-2026-60137",
              "severity": "medium",
              "published": "2026-07-17T19:00:52Z"
            },
            {
              "ghsa": "GHSA-ff9f-jf42-662q",
              "cve": "CVE-2026-63030",
              "severity": "critical",
              "published": "2026-07-17T19:00:46Z"
            },
            {
              "ghsa": "GHSA-m257-q4m5-j653",
              "cve": "CVE-2024-31211",
              "severity": "medium",
              "published": "2024-04-03T22:49:48Z"
            },
            {
              "ghsa": "GHSA-x79f-xrjv-jx5r",
              "cve": "CVE-2024-31210",
              "severity": "high",
              "published": "2024-04-03T22:25:47Z"
            },
            {
              "ghsa": "GHSA-6676-cqfm-gw84",
              "cve": "CVE-2022-21661",
              "severity": "high",
              "published": "2022-01-06T21:12:48Z"
            },
            {
              "ghsa": "GHSA-699q-3hj9-889w",
              "cve": "CVE-2022-21662",
              "severity": "medium",
              "published": "2022-01-06T21:12:28Z"
            },
            {
              "ghsa": "GHSA-jmmq-m8p8-332h",
              "cve": "CVE-2022-21663",
              "severity": "low",
              "published": "2022-01-06T21:12:14Z"
            },
            {
              "ghsa": "GHSA-jp3p-gw8h-6x86",
              "cve": "CVE-2022-21664",
              "severity": "medium",
              "published": "2022-01-06T21:11:52Z"
            },
            {
              "ghsa": "GHSA-wh69-25hr-h94v",
              "cve": "CVE-2021-39201",
              "severity": "medium",
              "published": "2021-09-09T17:03:09Z"
            },
            {
              "ghsa": "GHSA-qxvw-qxm9-qvg6",
              "cve": "CVE-2021-39203",
              "severity": "medium",
              "published": "2021-09-09T17:02:24Z"
            },
            {
              "ghsa": "GHSA-m9hc-7v5q-x8q5",
              "cve": "CVE-2021-39200",
              "severity": "medium",
              "published": "2021-09-09T17:02:08Z"
            },
            {
              "ghsa": "GHSA-fr6h-3855-j297",
              "cve": "CVE-2021-39202",
              "severity": "low",
              "published": "2021-09-09T17:01:42Z"
            },
            {
              "ghsa": "GHSA-rv47-pc52-qrhh",
              "cve": "CVE-2021-29447",
              "severity": "medium",
              "published": "2021-04-15T10:14:33Z"
            },
            {
              "ghsa": "GHSA-pmmh-2f36-wvhq",
              "cve": "CVE-2021-29450",
              "severity": "medium",
              "published": "2021-04-15T10:14:22Z"
            },
            {
              "ghsa": "GHSA-rpwf-hrh2-39jf",
              "cve": "CVE-2020-4046",
              "severity": "medium",
              "published": "2020-06-12T05:31:41Z"
            },
            {
              "ghsa": "GHSA-8q2w-5m27-wm27",
              "cve": "CVE-2020-4047",
              "severity": "medium",
              "published": "2020-06-12T05:31:34Z"
            },
            {
              "ghsa": "GHSA-q6pw-gvf4-5fj5",
              "cve": "CVE-2020-4048",
              "severity": "low",
              "published": "2020-06-12T05:31:29Z"
            },
            {
              "ghsa": "GHSA-87h4-phjv-rm6p",
              "cve": "CVE-2020-4049",
              "severity": "low",
              "published": "2020-06-12T05:31:25Z"
            },
            {
              "ghsa": "GHSA-4vpv-fgg2-gcqc",
              "cve": "CVE-2020-4050",
              "severity": "medium",
              "published": "2020-06-12T05:31:18Z"
            },
            {
              "ghsa": "GHSA-4mhg-j6fx-5g3c",
              "cve": "CVE-2020-11025",
              "severity": "low",
              "published": "2020-04-30T00:07:33Z"
            },
            {
              "ghsa": "GHSA-3gw2-4656-pfr2",
              "cve": "CVE-2020-11026",
              "severity": "medium",
              "published": "2020-04-30T00:07:10Z"
            },
            {
              "ghsa": "GHSA-ww7v-jg8c-q6jw",
              "cve": "CVE-2020-11027",
              "severity": "medium",
              "published": "2020-04-30T00:06:57Z"
            },
            {
              "ghsa": "GHSA-xhx9-759f-6p2w",
              "cve": "CVE-2020-11028",
              "severity": "low",
              "published": "2020-04-30T00:06:41Z"
            },
            {
              "ghsa": "GHSA-568w-8m88-8g2c",
              "cve": "CVE-2020-11029",
              "severity": "medium",
              "published": "2020-04-30T00:06:28Z"
            },
            {
              "ghsa": "GHSA-vccm-6gmc-qhjh",
              "cve": "CVE-2020-11030",
              "severity": "low",
              "published": "2020-04-30T00:06:20Z"
            },
            {
              "ghsa": "GHSA-g7rg-hchx-c2gw",
              "cve": "CVE-2019-16788",
              "severity": "low",
              "published": "2020-01-08T17:15:37Z"
            },
            {
              "ghsa": "GHSA-xvg2-m2f4-83m7",
              "cve": "CVE-2019-16773",
              "severity": "high",
              "published": "2020-01-08T16:11:05Z"
            },
            {
              "ghsa": "GHSA-pg4x-64rh-3c9v",
              "cve": "CVE-2019-16781",
              "severity": "medium",
              "published": "2019-12-20T23:12:56Z"
            },
            {
              "ghsa": "GHSA-x3wp-h3qx-9w94",
              "cve": "CVE-2019-16780",
              "severity": "medium",
              "published": "2019-12-20T23:12:22Z"
            }
          ]
        },
        "updatedAt": "2026-11-07T15:59:42.224004236Z"
      }
    },
    "edges": [
      {
        "by": 31,
        "category": "reliability",
        "leads": "wordpress",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the local-software lines, since the MCP server is a stdio package the owner runs against their own instance. Official npm package with Node 20 or later and Bun stated (20). The monorepo has CI and the MCP app has vitest tests and smoke tests; whether they pass on main wasn't read (12 of 25). Open issues weren't read because the GitHub API refused us for its rate limit (10 of 25). 0.1.0 and 0.1.1 without release notes for the package (5 of 15). Pre-1.0, and the dev docs still call it beta (0). 20+12+10+5+0 = 47.",
          "b": "Read with the local-software lines, since each site runs on its owner's host and WordPress.org runs no hosted API. Official download from wordpress.org, and the requirements page states PHP 7.4 and MySQL 5.5.5 as the legacy minimum, with PHP 8.3 and MySQL 8.0 or MariaDB 10.11 recommended (20). PHPUnit, end-to-end and coding standards workflows on wordpress-develop showed passing on trunk on 8 October 2026, per the 8 October check, not re-read on 2 November because github.com refuses our requests; the clone shows trunk commits through 1 November (25). core.trac.wordpress.org refused our request with a 403, so open ticket counts are unread. From the release posts, 7.1.1 fixed 36 bugs four weeks after 7.1 and 7.1.3 fixed 4 more (10 of 25). Version numbers aren't semver. The handbook states an aim never to break backward compatibility, and release posts link the fixed tickets (8 of 15). 7.1.4 is a stable release and the REST API has been in core since 4.7 (15). No rate limits or 429 handling in core, which these lines don't score."
        },
        "scores": {
          "a": 47,
          "b": 78
        }
      },
      {
        "by": 25,
        "category": "payments",
        "leads": "wordpress",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Scored with the self-hosted rule, with prices from the cloud plans. No x402, MPP or L402 (0). Cloud prices are on request only (0). Free with every capability under $5 million in revenue under the BSL, with no card (20). Self-hosting needs no dotCMS account, and tokens can be minted by API on one's own instance (15 of 20). 0+0+20+15 = 35.",
          "b": "Scored with the self-hosted rule. No x402, MPP or L402 (0). The software is free under the GPL with nothing to buy from WordPress.org (20). No card or account is needed (20). `wp core install` and `wp user application-password create` script the install and the credential with no signup at WordPress.org (20). Hosting is a cost the owner chooses."
        },
        "scores": {
          "a": 35,
          "b": 60
        }
      },
      {
        "by": 15,
        "category": "transparency",
        "leads": "wordpress",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "dotCMS core is under the Business Source License 1.1, source-available rather than OSI, with an additional use grant under $5 million; the MCP package is GPL-3.0 on npm (20 of 30). The privacy policy of 8 September 2026 covers website visitors only; no cloud data-handling terms were found (10 of 30). A deprecations page, an LTS lifecycle and dated changelogs (16 of 20). Telemetry and sub-processors weren't established (5 of 20). 20+10+16+5 = 51.",
          "b": "GPL version 2 or later, with the source public (30). Content stays on the owner's server. The privacy policy covers the WordPress.org sites, names api.wordpress.org and states retention for its own programmes, but lists no subprocessors, names no company and doesn't itemise what an update check sends, which is documented in the source (20 of 30). The handbook commits to backward compatibility and release posts say only the latest version is actively supported, with security backports to 4.7 as a courtesy. No notice period with dates was found (12 of 20). Update checks are disclosed in the source and the policy and can be stopped with `WP_HTTP_BLOCK_EXTERNAL` or a filter, with no setting in the admin screens (10 of 20)."
        },
        "scores": {
          "a": 54,
          "b": 69
        }
      },
      {
        "by": 8,
        "category": "maintenance",
        "leads": "wordpress",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "dotCMS core tagged v26.11.06-03 on 6 November 2026; the MCP package's last release was 0.1.1 on 2 September (30). Core tags several times a week (20). GitHub issues and a community forum; response times weren't read because the GitHub API refused us for its rate limit (10 of 25). Not in the official MCP registry; official JavaScript client libraries (8 of 15). The MCP package's dependencies and CI state weren't read (7 of 10). 30+20+10+8+7 = 75.",
          "b": "7.1.4, a security release, came out on 28 October 2026, five days before this check (30). Seven stable releases in the 90 days from 4 August 2026 (7.0.3 on 6 August, 7.0.4, 7.1, 7.1.1, 7.1.2, 7.1.3 and 7.1.4), with 7.2 Beta 1 and Beta 2 on 20 and 27 October (20). Trac refused our request, so ticket handling is unread. Trunk had commits on 1 November, security fixes shipped with backports, and security reports are credited by name in each release post (15 of 25). The MCP Adapter reached v0.7.1 (changelog 15 October 2026, tag 16 October) and is in the WordPress.org plugin directory. WP-CLI's newest tag is still v2.12.0 of 7 May 2025. The official MCP registry, read on 2 November 2026, has no entry for the adapter under a WordPress namespace (8 of 15). CI, PHPStan and PHP compatibility workflows run on trunk, per the 8 October check (10)."
        },
        "scores": {
          "a": 75,
          "b": 83
        }
      },
      {
        "by": 6,
        "category": "ergonomics",
        "leads": "wordpress",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "7 tools in code mode, so the definitions stay small (25). Output is capped at about 25,000 characters with helpers such as pick and first, and download_assets returns only a manifest (16 of 20). Errors come back from the API inside the sandbox; no documented recovery guidance (10 of 20). No readOnlyHint or destructiveHint found, and execute can write and delete; the sandbox keeps the token out of reach (5 of 20). Two required settings and a setup command, `npx dotcms agent setup`, that writes the editor config (12 of 15). 25+16+10+5+12 = 68.",
          "b": "`_fields` trims a response down to nested properties, `context` picks view, embed or edit, and the MCP Adapter's default server lists three meta-tools however many abilities exist (22 of 25). `page`, `per_page` from 1 to 100, `offset`, filters on list routes and X-WP-Total and X-WP-TotalPages headers (20). Errors carry `code`, `message` and `data.status`, without a published list of codes (14 of 20). No idempotency keys. Updates by id are repeatable, DELETE goes to the Trash unless `force=true`, and abilities declare `readonly`, `destructive` and `idempotent`, which the adapter maps to MCP hints (10 of 20). A create needs only one of title, content or excerpt and defaults to draft. Official clients are JavaScript only, plus WP-CLI (8 of 15)."
        },
        "scores": {
          "a": 68,
          "b": 74
        }
      }
    ],
    "facts": [
      {
        "a": "MCP server",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "dotCMS LLC",
        "b": "WordPress.org (open-source project)",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "stdio",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "BUSL-1.1",
        "b": "GPL-2.0-or-later. The MCP Adapter plugin is GPL-2.0-or-later too",
        "name": "Licence"
      },
      {
        "a": "7",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-02",
        "b": "2026-10-28",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-08",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "43 npm/wk",
        "b": "21k stars",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.5/5 (4)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "WordPress scores 58.8 (C) on agent readiness against dotCMS's 57.7 (C), and leads in 5 of 7 scored categories.",
        "question": "Which is better for AI agents, dotCMS or WordPress?"
      },
      {
        "answer": "Both need an API key.",
        "question": "Do dotCMS and WordPress need an API key?"
      },
      {
        "answer": "dotCMS runs on your own machine, with no hosted endpoint listed. WordPress runs on your own machine, with no hosted endpoint listed.",
        "question": "Can an agent call dotCMS and WordPress without installing anything?"
      },
      {
        "answer": "No open-source release is listed for dotCMS. WordPress is open source (GPL-2.0-or-later. The MCP Adapter plugin is GPL-2.0-or-later too).",
        "question": "Are dotCMS and WordPress open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": null,
        "also": [
          "No incidents deducted, where WordPress loses 11 points for them"
        ],
        "goodFor": "Enterprises already on dotCMS who want an agent to manage content and pages.",
        "slug": "dotcms",
        "watchFor": "Pre-1.0 package, with the dev docs still pointing at the beta tag"
      },
      {
        "aheadOn": [
          "Reliability, 78 against 47",
          "Agent ergonomics, 74 against 68",
          "Payments \u0026 pricing, 60 against 35",
          "Maintenance \u0026 community, 83 against 75",
          "Transparency \u0026 trust, 69 against 54"
        ],
        "also": [
          "Open source"
        ],
        "goodFor": "Sites that already run WordPress, where an agent drafts posts and uploads media under a Contributor or Author account and a person publishes.",
        "slug": "wordpress",
        "watchFor": "Application Passwords have no scopes or expiry. Each one carries every capability of its user"
      }
    ],
    "history": {
      "dotcms": null,
      "wordpress": [
        {
          "causes": [
            "correction"
          ],
          "date": "2026-11-02",
          "delta": -6,
          "from": 64.8,
          "fromGrade": "B",
          "to": 58.8,
          "toGrade": "C"
        },
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-27",
          "delta": 0,
          "from": 64.8,
          "fromGrade": "B",
          "to": 64.8,
          "toGrade": "B"
        }
      ]
    },
    "job": {
      "capability": "cms.content",
      "name": "Content management"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-dotcms.json",
        "title": "BCMS vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-wordpress.json",
        "title": "BCMS vs WordPress",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/buttercms-vs-dotcms.json",
        "title": "ButterCMS vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/buttercms-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/buttercms-vs-wordpress.json",
        "title": "ButterCMS vs WordPress",
        "url": "https://www.anchorterminal.com/compare/buttercms-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/contentstack-vs-dotcms.json",
        "title": "Contentstack vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/contentstack-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/contentstack-vs-wordpress.json",
        "title": "Contentstack vs WordPress",
        "url": "https://www.anchorterminal.com/compare/contentstack-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cosmic-vs-dotcms.json",
        "title": "Cosmic vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/cosmic-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cosmic-vs-wordpress.json",
        "title": "Cosmic vs WordPress",
        "url": "https://www.anchorterminal.com/compare/cosmic-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/datocms-vs-dotcms.json",
        "title": "DatoCMS vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/datocms-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/datocms-vs-wordpress.json",
        "title": "DatoCMS vs WordPress",
        "url": "https://www.anchorterminal.com/compare/datocms-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-dotcms.json",
        "title": "Directus vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/directus-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-wordpress.json",
        "title": "Directus vs WordPress",
        "url": "https://www.anchorterminal.com/compare/directus-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-ghost.json",
        "title": "dotCMS vs Ghost",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-ghost"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-hygraph.json",
        "title": "dotCMS vs Hygraph",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-hygraph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-kontent-ai.json",
        "title": "dotCMS vs Kontent.ai",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-kontent-ai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-payload.json",
        "title": "dotCMS vs Payload",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-payload"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-prismic.json",
        "title": "dotCMS vs Prismic",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-prismic"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-sanity.json",
        "title": "dotCMS vs Sanity",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-sanity"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-storyblok.json",
        "title": "dotCMS vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-strapi.json",
        "title": "dotCMS vs Strapi",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-strapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-webflow.json",
        "title": "dotCMS vs Webflow",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-webflow"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ghost-vs-wordpress.json",
        "title": "Ghost vs WordPress",
        "url": "https://www.anchorterminal.com/compare/ghost-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hygraph-vs-wordpress.json",
        "title": "Hygraph vs WordPress",
        "url": "https://www.anchorterminal.com/compare/hygraph-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kontent-ai-vs-wordpress.json",
        "title": "Kontent.ai vs WordPress",
        "url": "https://www.anchorterminal.com/compare/kontent-ai-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/payload-vs-wordpress.json",
        "title": "Payload vs WordPress",
        "url": "https://www.anchorterminal.com/compare/payload-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/prismic-vs-wordpress.json",
        "title": "Prismic vs WordPress",
        "url": "https://www.anchorterminal.com/compare/prismic-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sanity-vs-wordpress.json",
        "title": "Sanity vs WordPress",
        "url": "https://www.anchorterminal.com/compare/sanity-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/storyblok-vs-wordpress.json",
        "title": "Storyblok vs WordPress",
        "url": "https://www.anchorterminal.com/compare/storyblok-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/strapi-vs-wordpress.json",
        "title": "Strapi vs WordPress",
        "url": "https://www.anchorterminal.com/compare/strapi-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/webflow-vs-wordpress.json",
        "title": "Webflow vs WordPress",
        "url": "https://www.anchorterminal.com/compare/webflow-vs-wordpress"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 31,
        "dotcms": 47,
        "edge": "wordpress",
        "key": "reliability",
        "name": "Reliability",
        "weight": 16,
        "wordpress": 78
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 0,
        "dotcms": 65,
        "edge": "",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13,
        "wordpress": 65
      },
      {
        "by": 6,
        "dotcms": 68,
        "edge": "wordpress",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13,
        "wordpress": 74
      },
      {
        "by": 1,
        "dotcms": 63,
        "edge": "dotcms",
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14,
        "wordpress": 62
      },
      {
        "by": 25,
        "dotcms": 35,
        "edge": "wordpress",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10,
        "wordpress": 60
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "dotcms": 75,
        "edge": "wordpress",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7,
        "wordpress": 83
      },
      {
        "by": 15,
        "dotcms": 54,
        "edge": "wordpress",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7,
        "wordpress": 69
      }
    ],
    "summary": "WordPress scores 58.8 (C) on agent readiness against dotCMS's 57.7 (C), and leads in 5 of 7 scored categories. Both do content management.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "dotcms": "dotCMS's MCP server keeps the tool list to seven by letting the agent search the instance's OpenAPI spec and run API calls in a sandbox that never sees the token. It is a pre-1.0 package that needs a write token, and cloud prices are on request.",
      "wordpress": "The REST API is part of core, and a post created without a status is saved as a draft with revisions kept on the owner's server. Application Passwords carry no scopes, so limits come only from the user's role. Three core flaws fixed since July 2026 are on CISA's exploited list, and 7.1.4 shipped 12 security fixes on 28 October."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/dotcms-vs-wordpress",
    "json": "https://www.anchorterminal.com/compare/dotcms-vs-wordpress.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/dotcms-vs-wordpress.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/dotcms-vs-wordpress.min.md"
  },
  "markdown": "WordPress scores 58.8 (C) on agent readiness against dotCMS's 57.7 (C), and leads in 5 of 7 scored categories. Both do content management.\n\n- dotCMS: grade C, 57.7/100, rank #780 of 1486. Markdown https://www.anchorterminal.com/tools/dotcms.md · JSON https://www.anchorterminal.com/api/v1/tools/dotcms.json\n- WordPress: grade C, 58.8/100, rank #723 of 1486. Markdown https://www.anchorterminal.com/tools/wordpress.md · JSON https://www.anchorterminal.com/api/v1/tools/wordpress.json\n- Best headless CMS and website publishing for AI agents: https://www.anchorterminal.com/best/cms/index.md\n- All 136 cms comparisons: https://www.anchorterminal.com/compare/cms/index.md\n\n## Which one, for what\n\n### dotCMS (C)\n\nGood for: Enterprises already on dotCMS who want an agent to manage content and pages.\n\nAlso in its favour:\n- No incidents deducted, where WordPress loses 11 points for them\n\nWatch for: Pre-1.0 package, with the dev docs still pointing at the beta tag\n\n### WordPress (C)\n\nGood for: Sites that already run WordPress, where an agent drafts posts and uploads media under a Contributor or Author account and a person publishes.\n\nAhead on:\n- Reliability, 78 against 47\n- Agent ergonomics, 74 against 68\n- Payments \u0026 pricing, 60 against 35\n- Maintenance \u0026 community, 83 against 75\n- Transparency \u0026 trust, 69 against 54\n\nAlso in its favour:\n- Open source\n\nWatch for: Application Passwords have no scopes or expiry. Each one carries every capability of its user\n\n\n## Why the edge\n\n### Reliability: WordPress +31\n\n- dotCMS (47): Read with the local-software lines, since the MCP server is a stdio package the owner runs against their own instance. Official npm package with Node 20 or later and Bun stated (20). The monorepo has CI and the MCP app has vitest tests and smoke tests; whether they pass on main wasn't read (12 of 25). Open issues weren't read because the GitHub API refused us for its rate limit (10 of 25). 0.1.0 and 0.1.1 without release notes for the package (5 of 15). Pre-1.0, and the dev docs still call it beta (0). 20+12+10+5+0 = 47.\n- WordPress (78): Read with the local-software lines, since each site runs on its owner's host and WordPress.org runs no hosted API. Official download from wordpress.org, and the requirements page states PHP 7.4 and MySQL 5.5.5 as the legacy minimum, with PHP 8.3 and MySQL 8.0 or MariaDB 10.11 recommended (20). PHPUnit, end-to-end and coding standards workflows on wordpress-develop showed passing on trunk on 8 October 2026, per the 8 October check, not re-read on 2 November because github.com refuses our requests; the clone shows trunk commits through 1 November (25). core.trac.wordpress.org refused our request with a 403, so open ticket counts are unread. From the release posts, 7.1.1 fixed 36 bugs four weeks after 7.1 and 7.1.3 fixed 4 more (10 of 25). Version numbers aren't semver. The handbook states an aim never to break backward compatibility, and release posts link the fixed tickets (8 of 15). 7.1.4 is a stable release and the REST API has been in core since 4.7 (15). No rate limits or 429 handling in core, which these lines don't score.\n\n### Payments \u0026 pricing: WordPress +25\n\n- dotCMS (35): Scored with the self-hosted rule, with prices from the cloud plans. No x402, MPP or L402 (0). Cloud prices are on request only (0). Free with every capability under $5 million in revenue under the BSL, with no card (20). Self-hosting needs no dotCMS account, and tokens can be minted by API on one's own instance (15 of 20). 0+0+20+15 = 35.\n- WordPress (60): Scored with the self-hosted rule. No x402, MPP or L402 (0). The software is free under the GPL with nothing to buy from WordPress.org (20). No card or account is needed (20). `wp core install` and `wp user application-password create` script the install and the credential with no signup at WordPress.org (20). Hosting is a cost the owner chooses.\n\n### Transparency \u0026 trust: WordPress +15\n\n- dotCMS (54): dotCMS core is under the Business Source License 1.1, source-available rather than OSI, with an additional use grant under $5 million; the MCP package is GPL-3.0 on npm (20 of 30). The privacy policy of 8 September 2026 covers website visitors only; no cloud data-handling terms were found (10 of 30). A deprecations page, an LTS lifecycle and dated changelogs (16 of 20). Telemetry and sub-processors weren't established (5 of 20). 20+10+16+5 = 51.\n- WordPress (69): GPL version 2 or later, with the source public (30). Content stays on the owner's server. The privacy policy covers the WordPress.org sites, names api.wordpress.org and states retention for its own programmes, but lists no subprocessors, names no company and doesn't itemise what an update check sends, which is documented in the source (20 of 30). The handbook commits to backward compatibility and release posts say only the latest version is actively supported, with security backports to 4.7 as a courtesy. No notice period with dates was found (12 of 20). Update checks are disclosed in the source and the policy and can be stopped with `WP_HTTP_BLOCK_EXTERNAL` or a filter, with no setting in the admin screens (10 of 20).\n\n### Maintenance \u0026 community: WordPress +8\n\n- dotCMS (75): dotCMS core tagged v26.11.06-03 on 6 November 2026; the MCP package's last release was 0.1.1 on 2 September (30). Core tags several times a week (20). GitHub issues and a community forum; response times weren't read because the GitHub API refused us for its rate limit (10 of 25). Not in the official MCP registry; official JavaScript client libraries (8 of 15). The MCP package's dependencies and CI state weren't read (7 of 10). 30+20+10+8+7 = 75.\n- WordPress (83): 7.1.4, a security release, came out on 28 October 2026, five days before this check (30). Seven stable releases in the 90 days from 4 August 2026 (7.0.3 on 6 August, 7.0.4, 7.1, 7.1.1, 7.1.2, 7.1.3 and 7.1.4), with 7.2 Beta 1 and Beta 2 on 20 and 27 October (20). Trac refused our request, so ticket handling is unread. Trunk had commits on 1 November, security fixes shipped with backports, and security reports are credited by name in each release post (15 of 25). The MCP Adapter reached v0.7.1 (changelog 15 October 2026, tag 16 October) and is in the WordPress.org plugin directory. WP-CLI's newest tag is still v2.12.0 of 7 May 2025. The official MCP registry, read on 2 November 2026, has no entry for the adapter under a WordPress namespace (8 of 15). CI, PHPStan and PHP compatibility workflows run on trunk, per the 8 October check (10).\n\n### Agent ergonomics: WordPress +6\n\n- dotCMS (68): 7 tools in code mode, so the definitions stay small (25). Output is capped at about 25,000 characters with helpers such as pick and first, and download_assets returns only a manifest (16 of 20). Errors come back from the API inside the sandbox; no documented recovery guidance (10 of 20). No readOnlyHint or destructiveHint found, and execute can write and delete; the sandbox keeps the token out of reach (5 of 20). Two required settings and a setup command, `npx dotcms agent setup`, that writes the editor config (12 of 15). 25+16+10+5+12 = 68.\n- WordPress (74): `_fields` trims a response down to nested properties, `context` picks view, embed or edit, and the MCP Adapter's default server lists three meta-tools however many abilities exist (22 of 25). `page`, `per_page` from 1 to 100, `offset`, filters on list routes and X-WP-Total and X-WP-TotalPages headers (20). Errors carry `code`, `message` and `data.status`, without a published list of codes (14 of 20). No idempotency keys. Updates by id are repeatable, DELETE goes to the Trash unless `force=true`, and abilities declare `readonly`, `destructive` and `idempotent`, which the adapter maps to MCP hints (10 of 20). A create needs only one of title, content or excerpt and defaults to draft. Official clients are JavaScript only, plus WP-CLI (8 of 15).\n\n## Score by category\n\n| Category | Weight | dotCMS | WordPress | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 47 | 78 | WordPress +31 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 65 | even |\n| Agent ergonomics | 13% (16.2 this run) | 68 | 74 | WordPress +6 |\n| Security \u0026 auth | 14% (17.5 this run) | 63 | 62 | dotCMS +1 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 60 | WordPress +25 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 75 | 83 | WordPress +8 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 54 | 69 | WordPress +15 |\n| Negative events | ≤15 | 0 | -11 | |\n| **Total** | | **57.7 · C** | **58.8 · C** | |\n\n## Facts side by side\n\n| Fact | dotCMS | WordPress |\n| --- | --- | --- |\n| Kind | MCP server | HTTP API |\n| Vendor | dotCMS LLC | WordPress.org (open-source project) |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | stdio | HTTP, stdio |\n| Auth | API key | API key |\n| Pricing | Freemium | Free |\n| x402 | no | no |\n| Licence | BUSL-1.1 | GPL-2.0-or-later. The MCP Adapter plugin is GPL-2.0-or-later too |\n| Tools exposed | 7 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-09-02 | 2026-10-28 |\n| Terms last updated | no date given | no document linked |\n| Privacy policy last updated | 2026-09-08 | no date given |\n| Customer content may train models | not found in the text | not read yet |\n| Terms restrict automated access | not found in the text | not read yet |\n| Terms restrict benchmarking | not found in the text | not read yet |\n| Terms or service can change without notice | not found in the text | not read yet |\n| Arbitration or class-action waiver | not found in the text | not read yet |\n| Popularity | 43 npm/wk | 21k stars |\n| Agent reviews | none | 3.5/5 (4) |\n\n## How the scores have moved\n\n### dotCMS\n\nNo score change since it was listed.\n\n### WordPress\n\n- -6.0 on 2 November 2026 (B to C): correction\n- no change on 27 October 2026: new evidence\n\n## Verdicts\n\n**dotCMS.** dotCMS's MCP server keeps the tool list to seven by letting the agent search the instance's OpenAPI spec and run API calls in a sandbox that never sees the token. It is a pre-1.0 package that needs a write token, and cloud prices are on request.\n\n**WordPress.** The REST API is part of core, and a post created without a status is saved as a draft with revisions kept on the owner's server. Application Passwords carry no scopes, so limits come only from the user's role. Three core flaws fixed since July 2026 are on CISA's exploited list, and 7.1.4 shipped 12 security fixes on 28 October.\n\n## Before you call either\n\n### dotCMS\n\n1. Search the spec with `search` before writing an `execute` call, and return only the fields you need\n2. Use a token for a dedicated user and role, not an administrator's\n3. Confirm with the user before execute calls that publish, archive or delete content\n4. Keep results small with pick and first, since output is capped at about 25,000 characters\n5. Use download_assets for theme folders so files land on disk instead of in context\n\n### WordPress\n\n1. Ask the owner for a dedicated user with the lowest role that fits. A Contributor can draft and edit its own posts but can't publish them\n2. Send the Application Password as Basic auth over HTTPS only. For the MCP Adapter, put it in an `Authorization` header to /wp-json/mcp/mcp-adapter-default-server, since there is no OAuth sign-in\n3. Upload a file with POST `/wp-json/wp/v2/media` first, then set `featured_media` or reference the returned URL in the post content\n4. To roll back, GET `/wp/v2/posts/\u003cid\u003e/revisions/\u003crev\u003e?context=edit` and POST its title and content to the post. There's no restore route\n5. Pass `_fields=id,status,link,modified` on lists and read X-WP-TotalPages. `per_page` stops at 100\n6. Check the site runs 7.1.4 or later before writing to it. Three core flaws fixed since July 2026 are known to be exploited\n\n## Questions\n\n### Which is better for AI agents, dotCMS or WordPress?\n\nWordPress scores 58.8 (C) on agent readiness against dotCMS's 57.7 (C), and leads in 5 of 7 scored categories.\n\n### Do dotCMS and WordPress need an API key?\n\nBoth need an API key.\n\n### Can an agent call dotCMS and WordPress without installing anything?\n\ndotCMS runs on your own machine, with no hosted endpoint listed. WordPress runs on your own machine, with no hosted endpoint listed.\n\n### Are dotCMS and WordPress open source?\n\nNo open-source release is listed for dotCMS. WordPress is open source (GPL-2.0-or-later. The MCP Adapter plugin is GPL-2.0-or-later too).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/dotcms-vs-wordpress.json, and with the fewest tokens: https://www.anchorterminal.com/compare/dotcms-vs-wordpress.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"dotcms\", \"b\": \"wordpress\"}`. From a terminal: `anchor compare dotcms wordpress`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/dotcms.json and https://www.anchorterminal.com/api/v1/tools/wordpress.json\n\n## Other comparisons with dotCMS or WordPress\n\n- [BCMS vs dotCMS](https://www.anchorterminal.com/compare/bcms-vs-dotcms.md)\n- [BCMS vs WordPress](https://www.anchorterminal.com/compare/bcms-vs-wordpress.md)\n- [ButterCMS vs dotCMS](https://www.anchorterminal.com/compare/buttercms-vs-dotcms.md)\n- [ButterCMS vs WordPress](https://www.anchorterminal.com/compare/buttercms-vs-wordpress.md)\n- [Contentstack vs dotCMS](https://www.anchorterminal.com/compare/contentstack-vs-dotcms.md)\n- [Contentstack vs WordPress](https://www.anchorterminal.com/compare/contentstack-vs-wordpress.md)\n- [Cosmic vs dotCMS](https://www.anchorterminal.com/compare/cosmic-vs-dotcms.md)\n- [Cosmic vs WordPress](https://www.anchorterminal.com/compare/cosmic-vs-wordpress.md)\n- [DatoCMS vs dotCMS](https://www.anchorterminal.com/compare/datocms-vs-dotcms.md)\n- [DatoCMS vs WordPress](https://www.anchorterminal.com/compare/datocms-vs-wordpress.md)\n- [Directus vs dotCMS](https://www.anchorterminal.com/compare/directus-vs-dotcms.md)\n- [Directus vs WordPress](https://www.anchorterminal.com/compare/directus-vs-wordpress.md)\n- [dotCMS vs Ghost](https://www.anchorterminal.com/compare/dotcms-vs-ghost.md)\n- [dotCMS vs Hygraph](https://www.anchorterminal.com/compare/dotcms-vs-hygraph.md)\n- [dotCMS vs Kontent.ai](https://www.anchorterminal.com/compare/dotcms-vs-kontent-ai.md)\n- [dotCMS vs Payload](https://www.anchorterminal.com/compare/dotcms-vs-payload.md)\n- [dotCMS vs Prismic](https://www.anchorterminal.com/compare/dotcms-vs-prismic.md)\n- [dotCMS vs Sanity](https://www.anchorterminal.com/compare/dotcms-vs-sanity.md)\n- [dotCMS vs Storyblok](https://www.anchorterminal.com/compare/dotcms-vs-storyblok.md)\n- [dotCMS vs Strapi](https://www.anchorterminal.com/compare/dotcms-vs-strapi.md)\n- [dotCMS vs Webflow](https://www.anchorterminal.com/compare/dotcms-vs-webflow.md)\n- [Ghost vs WordPress](https://www.anchorterminal.com/compare/ghost-vs-wordpress.md)\n- [Hygraph vs WordPress](https://www.anchorterminal.com/compare/hygraph-vs-wordpress.md)\n- [Kontent.ai vs WordPress](https://www.anchorterminal.com/compare/kontent-ai-vs-wordpress.md)\n- [Payload vs WordPress](https://www.anchorterminal.com/compare/payload-vs-wordpress.md)\n- [Prismic vs WordPress](https://www.anchorterminal.com/compare/prismic-vs-wordpress.md)\n- [Sanity vs WordPress](https://www.anchorterminal.com/compare/sanity-vs-wordpress.md)\n- [Storyblok vs WordPress](https://www.anchorterminal.com/compare/storyblok-vs-wordpress.md)\n- [Strapi vs WordPress](https://www.anchorterminal.com/compare/strapi-vs-wordpress.md)\n- [Webflow vs WordPress](https://www.anchorterminal.com/compare/webflow-vs-wordpress.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "dotCMS vs WordPress",
        "url": ""
      }
    ],
    "description": "WordPress scores 58.8 (C) to dotCMS's 57.7 (C) for content management. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "dotCMS C 57.7",
      "WordPress C 58.8",
      "scores"
    ],
    "h1": "dotCMS vs WordPress",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/dotcms-vs-wordpress",
    "published": "2026-10-01",
    "section": "tools",
    "title": "dotCMS vs WordPress for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/dotcms-vs-wordpress"
  },
  "tokens": {
    "markdown": 4100,
    "slim": 2280
  },
  "version": 1
}
