{
  "data": {
    "a": {
      "slug": "directus",
      "name": "Directus",
      "vendor": "Monospace Inc. (Directus)",
      "vendorUrl": "https://directus.com",
      "kind": "http-api",
      "category": "cms",
      "summary": "Directus is a source-available headless CMS and data platform that runs on an SQL database, self-hosted or on a paid cloud. Agents manage items, files and the data model through REST, GraphQL and a built-in MCP server.",
      "url": "https://www.anchorterminal.com/tools/directus",
      "markdownUrl": "https://www.anchorterminal.com/tools/directus.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/directus.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/directus.json",
      "dns": "directus.grade.anchorterminal.com",
      "repo": "https://github.com/directus/directus",
      "license": "MSCL-1.0-GPL (Monospace Sustainable Core Licence 1.0), source-available with a licence key for paid tiers, each version converting to GPL-3.0 after four years. `@directus/sdk` is MIT",
      "transports": [
        "http",
        "streamable-http"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "directus"
        },
        {
          "registry": "npm",
          "name": "@directus/sdk"
        },
        {
          "registry": "npm",
          "name": "@directus/specs"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve on your own instance, with no app review or partner approval. The MCP server at `/mcp` accepts OAuth (PKCE, with dynamic client registration or client ID metadata documents, both off by default) and issues a token with the `mcp:access` scope that works only on the MCP endpoint. REST, GraphQL and MCP also accept a static token, one per user, which doesn't expire and is sent as `Authorization: Bearer` or as `?access_token=` in the URL. Log-in tokens are short-lived with a refresh token. Every credential acts with its user's access policies, down to collection, action, field and item rule.",
      "pricing": "freemium",
      "pricingNotes": "The Core tier is free to self-host with 3 Studio seats, 25 collections and 5 flows, with no card, account or contract, so an agent can start at once. Team is $499 a month on an annual term or $599 monthly with 10 SSO seats, 50 collections and 20 flows, and Enterprise is priced by sales. Directus Cloud hosting adds $89 a month billed yearly or $99 monthly on Core and Team, with a 14-day trial. The Open Innovation Grant lifts the limits for organisations under $5M revenue and 50 employees (checked 2026-11-01).",
      "priceSummary": "$499 / mo",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs index, the pricing page or the repository's MCP source (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 12,
      "popularity": {
        "githubStars": 38295,
        "npmWeekly": 22588,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://directus.com/docs",
      "llmsTxt": "https://directus.com/docs/llms.txt",
      "openapi": "https://github.com/directus/directus/blob/main/packages/specs/src/openapi.yaml",
      "capabilities": [
        "cms.content",
        "cms.schema",
        "cms.assets",
        "cms.publish",
        "cms.localisation"
      ],
      "tags": [
        "source-available",
        "self-hosted",
        "hosted",
        "mcp",
        "oauth",
        "openapi",
        "llms-txt",
        "graphql",
        "typescript",
        "sql",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-10-27",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 58.1,
        "grade": "C",
        "agentReady": false,
        "rank": 758,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 11,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 73,
          "maintenance": 86,
          "payments": 55,
          "reliability": 82,
          "schema": 81,
          "security": 68,
          "transparency": 62
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-01"
        },
        "negative": -15,
        "negativeNotes": [
          "Directus publishes its own advisories on GitHub. OSV lists 19 published between 13 November 2025 and 20 July 2026, all fixed in released versions, 8 rated High (six on 4 April 2026, among them path traversal in the file API, GHSA-393c-p46r-7c95, and a TUS upload authorisation bypass, GHSA-qqmv-5p3g-px89, and two on 20 July, among them an unsegmented cache key, GHSA-c6w9-5g5j-jh2p) and 11 Moderate. The 8 October check also read on GitHub at least 20 advisories published between 24 June and 2 September 2026, at least 11 High and one critical (GHSA-97xr-jchp-xm3c, 5 August, WebSocket item access after a failed authentication message, fixed in 12.1.0). Counted per advisory, 1 for each fixed High or Moderate more than two months old, the OSV list alone gives 19, held at the 15-point limit. The 8 October check grouped them at 6. https://api.osv.dev/v1/query ; https://github.com/directus/directus/security/advisories"
        ],
        "verdict": "The built-in MCP server runs under the connecting user's permissions, supports OAuth limited to the MCP endpoint and refuses deletes unless an administrator allows them. A licence check caps the free Core tier at 3 seats, 25 collections and 5 flows, and Directus published more than 30 security advisories in the past year.",
        "bestFor": "Teams that already keep content in an SQL database and want an agent to edit items, files and the data model under a named user's permissions.",
        "strengths": [
          "MCP OAuth with PKCE issues tokens with the `mcp:access` scope and the MCP endpoint as audience, and administrators can revoke registered clients",
          "Deletes through MCP are refused unless the Allow Deletes setting is on, and the MCP server itself is off by default",
          "Registry mode at `/mcp?tool_mode=registry` cuts the tool list to `search`, `execute` and `schema`",
          "Content versioning has REST endpoints to save, compare and promote a version, and revisions record each change",
          "Seven tagged releases between 18 August and 27 October 2026, with breaking changes listed per version in the docs"
        ],
        "weaknesses": [
          "Version 12 (10 June 2026) added licence enforcement. The free Core tier allows 3 Studio seats, 25 collections and 5 flows, and an instance over its limits is locked after a grace period",
          "The licence is MSCL-1.0-GPL, source-available and not OSI approved, with a ban on competing use and on bypassing the licence key",
          "Static tokens never expire, are stored in plain text in `directus_users`, and the MCP guide shows them in the URL as `?access_token=`",
          "Releases don't follow semantic versioning, and 12.1 to 12.6 each carried breaking changes",
          "More than 30 security advisories published in the 12 months to November 2026, at least 18 of them rated High or critical"
        ],
        "agentNotes": [
          "Connect with OAuth or an `Authorization: Bearer` header. Don't put the token in the URL as `?access_token=`, where it can be logged",
          "Use `/mcp?tool_mode=registry` when the client loads every tool definition. Default mode sends each tool's full instructions, about 79 KB in total",
          "Read the `schema` tool before writing. Item payloads are untyped objects, so field names and types come only from the data model",
          "Publish a version with `POST /versions/{id}/promote` over REST. The MCP `items` tool refuses system collections such as `directus_versions`",
          "Count translation and junction tables against the 25-collection Core limit before creating collections"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 2.8,
        "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.1
          }
        ],
        "editorialScores": {
          "ergonomics": 73,
          "maintenance": 86,
          "payments": 55,
          "reliability": 82,
          "schema": 81,
          "security": 68,
          "transparency": 55
        },
        "provenanceScore": 68,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-01",
            "maintenance": "2026-11-01",
            "payments": "2026-11-01",
            "reliability": "2026-11-01",
            "schema": "2026-11-01",
            "security": "2026-11-01",
            "transparency": "2026-11-01"
          },
          "last": "2026-11-01",
          "lastMoved": "2026-11-01",
          "oldest": "2026-11-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install @directus/sdk",
        "claudeCode": "claude mcp add --transport http directus https://your-directus-url.com/mcp",
        "config": {
          "mcpServers": {
            "directus": {
              "headers": {
                "Authorization": "Bearer your-generated-token"
              },
              "url": "https://your-directus-url.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/cms.content",
        "tool": "https://letme.dev/directus"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Core, self-hosted",
          "unit": "month",
          "usd": 0,
          "note": "3 Studio seats, 25 collections, 5 flows"
        },
        {
          "item": "Team",
          "unit": "month",
          "usd": 499,
          "note": "annual term, or $599 billed monthly. 10 seats, 50 collections, 20 flows"
        },
        {
          "item": "Team extra seat",
          "unit": "seat-month",
          "usd": 50,
          "note": "Studio users only"
        },
        {
          "item": "Directus Cloud hosting add-on",
          "unit": "month",
          "usd": 99,
          "note": "$89 a month billed yearly, $99 monthly, for Core and Team"
        }
      ],
      "provenance": {
        "legalEntity": "Monospace Inc. (doing business as Directus)",
        "domain": "directus.com",
        "domainRegistered": "1997-02-06",
        "endpointOnVendorDomain": false,
        "terms": "https://directus.com/license",
        "privacy": "https://directus.com/privacy",
        "statusPage": "https://status.directus.cloud",
        "changelog": "https://github.com/directus/directus/releases",
        "securityTxt": "none",
        "checked": "2026-11-01",
        "notes": [
          "The privacy policy (last updated 9 June 2026) names Monospace Inc., doing business as Directus, a Delaware corporation, at 223 Bedford Ave STE A #855, Brooklyn, New York. The terms page, dated 28 April 2025, gives the same entity.",
          "`terms` points at the MSCL-1.0-GPL licence text, which governs a self-hosted install. directus.com/terms reads as website terms of use, and Directus Cloud has separate Cloud policies at directus.com/cloud-policies.",
          "The privacy policy says personal information processed for customers of the product is handled under customer agreements, not the policy. No public DPA was found.",
          "A self-hosted install answers on its owner's domain. It contacts licensing.directus.com when a licence key is set and, since 12.6.0, telemetry.directus.com for usage reports (telemetry.directus.io before).",
          "https://directus.com/.well-known/security.txt returned 404 on 8 October and 1 November 2026. directus.io redirects to directus.com.",
          "RDAP for directus.com gives a registration date of 1997-02-06, which predates the company's use of the domain.",
          "The status page runs on Statuspage and covers Directus Cloud regions and the dashboard, not self-hosted installs."
        ],
        "score": 68
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/directus.json",
      "live": {
        "slug": "directus",
        "vendorStatus": {
          "page": "https://status.directus.cloud",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T18:21:02.401808384Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "directus/directus",
            "version": "v12.6.1",
            "released": "2026-11-04",
            "seenAt": "2026-11-06T23:21:39.285498358Z"
          },
          {
            "registry": "npm",
            "name": "@directus/sdk",
            "version": "27.1.0",
            "seenAt": "2026-11-06T23:21:37.036479777Z"
          },
          {
            "registry": "npm",
            "name": "@directus/specs",
            "version": "16.0.0",
            "seenAt": "2026-11-06T23:21:37.221743318Z"
          },
          {
            "registry": "npm",
            "name": "directus",
            "version": "12.6.1",
            "seenAt": "2026-11-06T23:21:31.006643999Z"
          }
        ],
        "githubStars": 38674,
        "npmWeekly": 34551,
        "securityTxt": {
          "url": "https://directus.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T15:59:42.3191585Z"
        },
        "llmsTxt": {
          "url": "https://directus.com/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:17.996845291Z"
        },
        "domain": {
          "domain": "directus.com",
          "registered": "1997-02-06",
          "source": "https://rdap.verisign.com/com/v1/domain/directus.com",
          "checkedAt": "2026-11-01T14:14:09.125793328Z"
        },
        "pages": [
          {
            "url": "https://directus.com/docs/releases/breaking-changes/version-12",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-11-07T14:04:50.68273308Z",
            "changedAt": "2026-11-06T13:27:20.765253652Z",
            "fingerprint": "a9e62fddd0f7"
          },
          {
            "url": "https://directus.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:04:55.013379319Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "316eed4e388b"
          },
          {
            "url": "https://directus.com/license",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:04:52.783466902Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "665a299857ad"
          }
        ],
        "github": {
          "repo": "directus/directus",
          "checkedAt": "2026-11-02T08:44:28.302940541Z",
          "stars": 38785,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-30T16:49:43Z",
          "openIssues": 302,
          "openPRs": 59,
          "issuesOpened90d": 100,
          "issuesClosed90d": 153,
          "prsMerged90d": 180,
          "ci": {
            "branch": "main",
            "runs": 50,
            "success": 37,
            "failure": 8,
            "other": 5,
            "latest": "success",
            "latestAt": "2026-10-30T11:04:43Z"
          },
          "advisories": [
            {
              "ghsa": "GHSA-jvxj-w2qp-5vmx",
              "severity": "medium",
              "published": "2026-10-30T15:11:35Z"
            },
            {
              "ghsa": "GHSA-95f8-mvw7-gpj9",
              "severity": "medium",
              "published": "2026-10-30T15:00:21Z"
            },
            {
              "ghsa": "GHSA-32cw-mf7w-gpqr",
              "severity": "high",
              "published": "2026-10-30T14:50:56Z"
            },
            {
              "ghsa": "GHSA-xf86-hfpm-92xr",
              "severity": "low",
              "published": "2026-10-19T20:37:26Z"
            },
            {
              "ghsa": "GHSA-2xcm-7h22-3m66",
              "severity": "medium",
              "published": "2026-10-19T19:24:53Z"
            },
            {
              "ghsa": "GHSA-8xp8-xrh2-88vr",
              "severity": "medium",
              "published": "2026-09-02T15:07:13Z"
            },
            {
              "ghsa": "GHSA-7h45-q5jx-7r87",
              "severity": "medium",
              "published": "2026-09-02T15:02:48Z"
            },
            {
              "ghsa": "GHSA-gwvv-rr68-cmv6",
              "severity": "high",
              "published": "2026-08-20T16:44:55Z"
            },
            {
              "ghsa": "GHSA-4jw7-6mqj-vrhq",
              "severity": "high",
              "published": "2026-08-20T16:30:17Z"
            },
            {
              "ghsa": "GHSA-7vcx-mhxq-9j96",
              "severity": "high",
              "published": "2026-08-20T16:17:22Z"
            },
            {
              "ghsa": "GHSA-r9xq-xp38-j4j3",
              "severity": "medium",
              "published": "2026-08-20T16:05:34Z"
            },
            {
              "ghsa": "GHSA-fq27-7m2r-q6vm",
              "severity": "medium",
              "published": "2026-08-20T15:52:55Z"
            },
            {
              "ghsa": "GHSA-3742-46gx-c8cc",
              "severity": "high",
              "published": "2026-08-05T16:36:32Z"
            },
            {
              "ghsa": "GHSA-xw72-c69j-h2rj",
              "severity": "high",
              "published": "2026-08-05T16:27:16Z"
            },
            {
              "ghsa": "GHSA-6hpw-rhhq-6xq3",
              "severity": "medium",
              "published": "2026-08-05T16:15:09Z"
            },
            {
              "ghsa": "GHSA-mww8-4gwh-rjfw",
              "severity": "high",
              "published": "2026-08-05T16:09:04Z"
            },
            {
              "ghsa": "GHSA-5h38-6755-g83w",
              "severity": "medium",
              "published": "2026-08-05T15:58:01Z"
            },
            {
              "ghsa": "GHSA-p623-wgx3-wxp8",
              "severity": "medium",
              "published": "2026-08-05T15:43:00Z"
            },
            {
              "ghsa": "GHSA-788p-cvgf-q973",
              "severity": "medium",
              "published": "2026-08-05T15:24:54Z"
            },
            {
              "ghsa": "GHSA-xjxq-pj7h-g676",
              "severity": "high",
              "published": "2026-08-05T15:13:43Z"
            },
            {
              "ghsa": "GHSA-ff8w-8crv-9rcf",
              "severity": "medium",
              "published": "2026-08-05T14:59:23Z"
            },
            {
              "ghsa": "GHSA-chfm-g7r3-vv42",
              "cve": "CVE-2026-10716",
              "severity": "high",
              "published": "2026-08-05T14:49:54Z"
            },
            {
              "ghsa": "GHSA-g293-vf99-xv36",
              "severity": "high",
              "published": "2026-08-05T14:37:34Z"
            },
            {
              "ghsa": "GHSA-97xr-jchp-xm3c",
              "severity": "critical",
              "published": "2026-08-05T14:10:57Z"
            },
            {
              "ghsa": "GHSA-c6w9-5g5j-jh2p",
              "cve": "CVE-2026-61836",
              "severity": "high",
              "published": "2026-06-24T16:40:53Z"
            },
            {
              "ghsa": "GHSA-j5h6-vqc3-phqh",
              "cve": "CVE-2026-61835",
              "severity": "high",
              "published": "2026-06-24T16:35:02Z"
            },
            {
              "ghsa": "GHSA-38hg-ww64-rrwc",
              "cve": "CVE-2026-35442",
              "severity": "high",
              "published": "2026-04-02T16:44:49Z"
            },
            {
              "ghsa": "GHSA-ph52-67fq-75wj",
              "cve": "CVE-2026-35441",
              "severity": "medium",
              "published": "2026-04-02T16:44:31Z"
            },
            {
              "ghsa": "GHSA-6q22-g298-grjh",
              "cve": "CVE-2026-35441",
              "severity": "high",
              "published": "2026-04-02T16:44:26Z"
            },
            {
              "ghsa": "GHSA-mvv8-v4jj-g47j",
              "cve": "CVE-2026-39943",
              "severity": "medium",
              "published": "2026-04-02T16:31:52Z"
            },
            {
              "ghsa": "GHSA-qqmv-5p3g-px89",
              "cve": "CVE-2026-35412",
              "severity": "high",
              "published": "2026-04-02T16:27:03Z"
            },
            {
              "ghsa": "GHSA-wv3h-5fx7-966h",
              "cve": "CVE-2026-35409",
              "severity": "high",
              "published": "2026-04-02T16:26:22Z"
            },
            {
              "ghsa": "GHSA-wxwm-3fxv-mrvx",
              "cve": "CVE-2026-35413",
              "severity": "medium",
              "published": "2026-04-02T16:26:04Z"
            },
            {
              "ghsa": "GHSA-cf45-hxwj-4cfj",
              "cve": "CVE-2026-35410",
              "severity": "medium",
              "published": "2026-04-02T16:18:19Z"
            },
            {
              "ghsa": "GHSA-q75c-4gmv-mg9x",
              "cve": "CVE-2026-35411",
              "severity": "medium",
              "published": "2026-04-02T16:18:03Z"
            },
            {
              "ghsa": "GHSA-393c-p46r-7c95",
              "cve": "CVE-2026-39942",
              "severity": "high",
              "published": "2026-04-02T16:03:30Z"
            },
            {
              "ghsa": "GHSA-8m32-p958-jg99",
              "cve": "CVE-2026-35408",
              "severity": "high",
              "published": "2026-04-02T16:01:08Z"
            },
            {
              "ghsa": "GHSA-jr94-gj3h-c8rf",
              "cve": "CVE-2026-26185",
              "severity": "medium",
              "published": "2026-02-12T16:47:36Z"
            },
            {
              "ghsa": "GHSA-3573-4c68-g8cc",
              "cve": "CVE-2026-22032",
              "severity": "medium",
              "published": "2026-01-06T18:55:01Z"
            },
            {
              "ghsa": "GHSA-cph6-524f-3hgr",
              "cve": "CVE-2025-64749",
              "severity": "medium",
              "published": "2025-11-13T15:00:02Z"
            },
            {
              "ghsa": "GHSA-8jpw-gpr4-8cmh",
              "cve": "CVE-2025-64748",
              "severity": "medium",
              "published": "2025-11-13T14:59:18Z"
            },
            {
              "ghsa": "GHSA-vv2v-pw69-8crf",
              "cve": "CVE-2025-64747",
              "severity": "medium",
              "published": "2025-11-13T14:49:53Z"
            },
            {
              "ghsa": "GHSA-9x5g-62gj-wqf2",
              "cve": "CVE-2025-64746",
              "severity": "medium",
              "published": "2025-11-13T14:48:27Z"
            },
            {
              "ghsa": "GHSA-mv33-9f6j-pfmc",
              "cve": "CVE-2025-55746",
              "severity": "critical",
              "published": "2025-08-20T06:38:22Z"
            },
            {
              "ghsa": "GHSA-7cvf-pxgp-42fc",
              "cve": "CVE-2025-53889",
              "severity": "medium",
              "published": "2025-07-14T18:38:08Z"
            },
            {
              "ghsa": "GHSA-rmjh-cf9q-pv7q",
              "cve": "CVE-2025-53887",
              "severity": "medium",
              "published": "2025-07-14T16:23:03Z"
            },
            {
              "ghsa": "GHSA-f24x-rm6g-3w5v",
              "cve": "CVE-2025-53886",
              "severity": "medium",
              "published": "2025-07-14T16:12:20Z"
            },
            {
              "ghsa": "GHSA-x3vm-88hf-gpxp",
              "cve": "CVE-2025-53885",
              "severity": "medium",
              "published": "2025-07-14T15:48:10Z"
            },
            {
              "ghsa": "GHSA-fm3h-p9wm-h74h",
              "cve": "CVE-2025-30353",
              "severity": "high",
              "published": "2025-03-26T15:20:25Z"
            },
            {
              "ghsa": "GHSA-7wq3-jr35-275c",
              "cve": "CVE-2025-30352",
              "severity": "medium",
              "published": "2025-03-26T15:04:58Z"
            },
            {
              "ghsa": "GHSA-56p6-qw3c-fq2g",
              "cve": "CVE-2025-30351",
              "severity": "low",
              "published": "2025-03-26T14:56:51Z"
            },
            {
              "ghsa": "GHSA-rv78-qqrq-73m5",
              "cve": "CVE-2025-30350",
              "severity": "medium",
              "published": "2025-03-26T14:52:55Z"
            },
            {
              "ghsa": "GHSA-j8xj-7jff-46mx",
              "cve": "CVE-2025-30225",
              "severity": "medium",
              "published": "2025-03-26T14:46:27Z"
            },
            {
              "ghsa": "GHSA-99vm-5v2h-h6r6",
              "cve": "CVE-2025-27089",
              "severity": "medium",
              "published": "2025-02-19T15:33:20Z"
            },
            {
              "ghsa": "GHSA-9qrm-48qf-r2rw",
              "cve": "CVE-2024-6533",
              "severity": "low",
              "published": "2025-01-23T16:08:13Z"
            },
            {
              "ghsa": "GHSA-pmf4-v838-29hg",
              "cve": "CVE-2025-24353",
              "severity": "medium",
              "published": "2025-01-23T15:54:02Z"
            },
            {
              "ghsa": "GHSA-849r-qrwj-8rv4",
              "cve": "CVE-2024-54151",
              "severity": "high",
              "published": "2024-12-09T14:47:46Z"
            },
            {
              "ghsa": "GHSA-r6wx-627v-gh2f",
              "cve": "CVE-2024-54128",
              "severity": "medium",
              "published": "2024-12-05T15:42:01Z"
            },
            {
              "ghsa": "GHSA-vw58-ph65-6rxp",
              "cve": "CVE-2024-47822",
              "severity": "medium",
              "published": "2024-10-08T12:52:21Z"
            },
            {
              "ghsa": "GHSA-68g8-c275-xf2m",
              "cve": "CVE-2024-46990",
              "severity": "medium",
              "published": "2024-09-18T16:19:10Z"
            },
            {
              "ghsa": "GHSA-cff8-x7jv-4fm8",
              "cve": "CVE-2024-45596",
              "severity": "high",
              "published": "2024-09-10T18:11:49Z"
            },
            {
              "ghsa": "GHSA-3fff-gqw3-vj86",
              "cve": "CVE-2024-6534",
              "severity": "medium",
              "published": "2024-08-27T16:12:08Z"
            },
            {
              "ghsa": "GHSA-jgf4-vwc3-r46v",
              "cve": "CVE-2024-39896",
              "severity": "high",
              "published": "2024-07-08T17:15:54Z"
            },
            {
              "ghsa": "GHSA-7hmh-pfrp-vcx4",
              "cve": "CVE-2024-39895",
              "severity": "medium",
              "published": "2024-07-08T16:00:15Z"
            },
            {
              "ghsa": "GHSA-hxgm-ghmv-xjjm",
              "cve": "CVE-2024-39701",
              "severity": "medium",
              "published": "2024-07-08T15:47:55Z"
            },
            {
              "ghsa": "GHSA-8p72-rcq4-h6pw",
              "cve": "CVE-2024-39699",
              "severity": "medium",
              "published": "2024-07-08T12:27:48Z"
            },
            {
              "ghsa": "GHSA-632p-p495-25m5",
              "cve": "CVE-2024-36128",
              "severity": "high",
              "published": "2024-06-03T14:30:39Z"
            },
            {
              "ghsa": "GHSA-g65h-35f3-x2w3",
              "cve": "CVE-2024-34709",
              "severity": "medium",
              "published": "2024-05-13T18:36:42Z"
            },
            {
              "ghsa": "GHSA-p8v3-m643-4xqx",
              "cve": "CVE-2024-34708",
              "severity": "medium",
              "published": "2024-05-13T18:36:31Z"
            },
            {
              "ghsa": "GHSA-fr3w-2p22-6w7p",
              "cve": "CVE-2024-28239",
              "severity": "medium",
              "published": "2024-03-12T18:29:08Z"
            },
            {
              "ghsa": "GHSA-2ccr-g2rv-h677",
              "cve": "CVE-2024-28238",
              "severity": "low",
              "published": "2024-03-12T18:28:20Z"
            },
            {
              "ghsa": "GHSA-5mhg-wv8w-p59j",
              "cve": "CVE-2024-27296",
              "severity": "medium",
              "published": "2024-03-01T12:15:56Z"
            },
            {
              "ghsa": "GHSA-qw9g-7549-7wg5",
              "cve": "CVE-2024-27295",
              "severity": "high",
              "published": "2024-03-01T12:15:40Z"
            },
            {
              "ghsa": "GHSA-hmgw-9jrg-hf2m",
              "cve": "CVE-2023-45820",
              "severity": "high",
              "published": "2023-10-19T18:19:43Z"
            },
            {
              "ghsa": "GHSA-22rr-f3p8-5gf8",
              "severity": "high",
              "published": "2023-09-14T11:42:18Z"
            },
            {
              "ghsa": "GHSA-gggm-66rh-pp98",
              "cve": "CVE-2023-38503",
              "severity": "medium",
              "published": "2023-07-25T21:37:34Z"
            },
            {
              "ghsa": "GHSA-8vg2-wf3q-mwv7",
              "cve": "CVE-2023-28443",
              "severity": "medium",
              "published": "2023-03-23T18:50:03Z"
            },
            {
              "ghsa": "GHSA-m5q3-8wgf-x8xf",
              "cve": "CVE-2023-27481",
              "severity": "medium",
              "published": "2023-03-07T11:22:08Z"
            },
            {
              "ghsa": "GHSA-4hmq-ggrm-qfc6",
              "cve": "CVE-2023-27474",
              "severity": "high",
              "published": "2023-03-06T09:13:24Z"
            },
            {
              "ghsa": "GHSA-j3rg-3rgm-537h",
              "cve": "CVE-2023-26492",
              "severity": "medium",
              "published": "2023-03-03T18:22:27Z"
            },
            {
              "ghsa": "GHSA-77qm-wvqq-fg79",
              "cve": "CVE-2022-36031",
              "severity": "medium",
              "published": "2022-08-19T20:03:56Z"
            },
            {
              "ghsa": "GHSA-g27j-74fp-xfpr",
              "cve": "CVE-2022-26969",
              "severity": "high",
              "published": "2022-04-04T13:33:23Z"
            },
            {
              "ghsa": "GHSA-xmjj-3c76-5w84",
              "cve": "CVE-2022-24814",
              "severity": "high",
              "published": "2022-04-04T13:32:53Z"
            }
          ],
          "replies": {
            "sampled": 25,
            "unanswered": 10,
            "medianDays": 0.3
          }
        },
        "updatedAt": "2026-11-07T18:21:02.401808384Z"
      }
    },
    "answer": "Directus and dotCMS score within a point of each other on agent readiness, 58.1 (C) and 57.7 (C).",
    "b": {
      "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"
      }
    },
    "edges": [
      {
        "by": 35,
        "category": "reliability",
        "leads": "directus",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the local-software lines, since the graded surface is the self-hosted software on the free Core tier. Directus Cloud's status page isn't scored here. Official Docker image `directus/directus` and npm package `directus` 12.6.0, with Node.js 26 or later in `engines` since 12.6.0 and the supported databases listed (20). The Check workflow passed on the 10 most recent runs on main on 8 October, per the 8 October check, not re-read on 1 November, and separate end-to-end and CodeQL workflows exist (25). 339 open issues. The 15 newest carry labels and one to eight comments, but we couldn't read closed counts, and at least 20 advisories were fixed between June and September 2026 (15 of 25). The docs say releases don't follow semantic versioning and any release may break. Breaking changes are listed per version, and 12.1 to 12.6 each had some (7 of 15). Version 12, and the MCP server isn't marked beta (15).",
          "b": "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."
        },
        "scores": {
          "a": 82,
          "b": 47
        }
      },
      {
        "by": 20,
        "category": "payments",
        "leads": "directus",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Scored with the self-hosted rule, taking prices from the paid options beside the free tier. No x402, MPP or L402 (0). Core is $0, Team is $499 a month on an annual term or $599 monthly, extra seats are $50 each a month, and Directus Cloud hosting is a $99 a month add-on, all public. Enterprise is priced by sales (20). The Core tier is free to self-host with no card and no account, and Cloud has a 14-day trial (20). `ADMIN_EMAIL`, `ADMIN_PASSWORD` and `ADMIN_TOKEN` create the first administrator and a static token at start-up, so the REST route needs no browser. The docs enable the MCP server only through the Studio settings page, so we took 5 off (15 of 20).",
          "b": "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."
        },
        "scores": {
          "a": 55,
          "b": 35
        }
      },
      {
        "by": 16,
        "category": "schema",
        "leads": "directus",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "An OpenAPI file ships in `@directus/specs` with 70 paths, each instance serves its own at `/server/specs/oas`, and every MCP tool has a typed input schema. The spec's `info.version` still reads 10 (22 of 25). llms.txt, llms-full.txt and a raw Markdown copy of every docs page (10). Each tool has a one-sentence description and a `prompt.md` of instructions with worked examples, up to 13 KB for flows, and a `system-prompt` tool sets conventions (16 of 20). Actions are enums and validation uses strict unions per action, but item data, filters, `deep`, and field `schema` and `meta` are open records (8 of 15). The errors page lists HTTP statuses and error codes with the response shape, and guides show REST, GraphQL and SDK examples side by side (14 of 15). A monthly changelog, release notes and breaking-change pages per major version. REST paths carry no version and releases aren't semantic (11 of 15).",
          "b": "The search tool exposes the instance's own OpenAPI spec, so the contract is machine-readable, though the tools themselves take JavaScript code (20 of 25). llms.txt and Markdown pages on dev.dotcms.com (10). The README says what each tool is for and gives examples; when not to use them isn't stated (12 of 20). Code strings rather than typed parameters for search and execute (4 of 15). Examples for both tools; error behaviour of the sandbox isn't documented (9 of 15). dotCMS changelogs are dated; the MCP package has no changelog (10 of 15). 20+10+12+4+9+10 = 65."
        },
        "scores": {
          "a": 81,
          "b": 65
        }
      },
      {
        "by": 11,
        "category": "maintenance",
        "leads": "directus",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "v12.6.0 was tagged on 27 October 2026 (30). Seven tagged releases in the 90 days from 3 August (12.3.0, 12.3.1, 12.4.0, 12.4.1, 12.5.0, 12.5.1 and 12.6.0) (20). 339 open issues, the newest labelled and answered, with 170 commits on main since 10 July, per the 8 October check, not re-read on 1 November. Closed-issue counts weren't readable (17 of 25). `@directus/sdk` is current and is the only official SDK. We couldn't reach the official MCP registry, which matters less for a server built into the product (10 of 15). Dependency updates for CVEs land in each release (12.5.1 and 12.6.0 among them), CI passed on main on 8 October and CodeQL runs (9 of 10).",
          "b": "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."
        },
        "scores": {
          "a": 86,
          "b": 75
        }
      },
      {
        "by": 8,
        "category": "transparency",
        "leads": "directus",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "The full source is public under MSCL-1.0-GPL, which bars competing use and bypassing the licence key and converts each version to GPL-3.0 after four years. It isn't an OSI licence. The SDK is MIT. The docs index still calls the licence BSL (19 of 30). A self-hosted install keeps content on its owner's servers. The privacy policy of 9 June 2026 says customer data is handled under customer agreements and not the policy, the terms dated 28 April 2025 let the company keep or delete account materials at its discretion, and no public DPA or retention period was found. The trust centre names five subprocessors without locations (16 of 30). Breaking changes are documented per version, upgrades to version 12 got a 30-day grace period and old monthly plans six months. No stated notice period for API changes (10 of 20). Telemetry is documented field by field with an opt-out variable, but it sends the instance's public URL and the opt-out is honoured only where the licence allows, which the pricing table lists for Enterprise alone (10 of 20).",
          "b": "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."
        },
        "scores": {
          "a": 62,
          "b": 54
        }
      },
      {
        "by": 5,
        "category": "ergonomics",
        "leads": "directus",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "Default mode lists 12 tools, the 11 to 30 band, but each definition carries its whole instruction file, 78,855 bytes in total at v12.5.0, so we scored 10 and added 8 for registry mode, which lists three tools and loads details on demand (18 of 25). `limit` (default 100), `offset`, `page`, `fields`, `filter`, `search`, `sort` and `aggregate`, with `QUERY_LIMIT_MAX` as a server cap (20). One error shape with a machine-readable `extensions.code`. Missing items answer `FORBIDDEN`, not 404, by design (17 of 20). Tools set `readOnlyHint` and `destructiveHint`, though one `items` tool covers reads and writes and is marked destructive. No idempotency keys were found in the reviewed documentation (10 of 20). Few required parameters. One official SDK, `@directus/sdk` for JavaScript and TypeScript (8 of 15).",
          "b": "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."
        },
        "scores": {
          "a": 73,
          "b": 68
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "Monospace Inc. (Directus)",
        "b": "dotCMS LLC",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MSCL-1.0-GPL (Monospace Sustainable Core Licence 1.0), source-available with a licence key for paid tiers, each version converting to GPL-3.0 after four years. `@directus/sdk` is MIT",
        "b": "BUSL-1.1",
        "name": "Licence"
      },
      {
        "a": "12",
        "b": "7",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-27",
        "b": "2026-09-02",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-06-09",
        "b": "2026-09-08",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "38k stars, 23k npm/wk",
        "b": "43 npm/wk",
        "name": "Popularity"
      },
      {
        "a": "2.8/5 (4)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Directus and dotCMS score within a point of each other on agent readiness, 58.1 (C) and 57.7 (C).",
        "question": "Which is better for AI agents, Directus or dotCMS?"
      },
      {
        "answer": "Directus takes an API key or an OAuth sign-in. dotCMS needs an API key.",
        "question": "Do Directus and dotCMS need an API key?"
      },
      {
        "answer": "No hosted endpoint is listed for Directus. dotCMS runs on your own machine, with no hosted endpoint listed.",
        "question": "Can an agent call Directus and dotCMS without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 82 against 47",
          "Schema \u0026 documentation, 81 against 65",
          "Agent ergonomics, 73 against 68",
          "Security \u0026 auth, 68 against 63",
          "Payments \u0026 pricing, 55 against 35",
          "Maintenance \u0026 community, 86 against 75",
          "Transparency \u0026 trust, 62 against 54"
        ],
        "also": null,
        "goodFor": "Teams that already keep content in an SQL database and want an agent to edit items, files and the data model under a named user's permissions.",
        "slug": "directus",
        "watchFor": "Version 12 (10 June 2026) added licence enforcement. The free Core tier allows 3 Studio seats, 25 collections and 5 flows, and an instance over its limits is locked after a grace period"
      },
      {
        "aheadOn": null,
        "also": [
          "Runs on your own machine",
          "No incidents deducted, where Directus loses 15 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"
      }
    ],
    "history": {
      "directus": [
        {
          "causes": [
            "correction"
          ],
          "date": "2026-11-01",
          "delta": -9,
          "from": 67.1,
          "fromGrade": "B",
          "to": 58.1,
          "toGrade": "C"
        },
        {
          "causes": [
            "correction"
          ],
          "date": "2026-10-28",
          "delta": -0.1,
          "from": 67.2,
          "fromGrade": "B",
          "to": 67.1,
          "toGrade": "B"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 67.1,
          "fromGrade": "B",
          "to": 67.2,
          "toGrade": "B"
        }
      ],
      "dotcms": null
    },
    "job": {
      "capability": "cms.content",
      "name": "Content management"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-directus.json",
        "title": "BCMS vs Directus",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-directus"
      },
      {
        "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/buttercms-vs-directus.json",
        "title": "ButterCMS vs Directus",
        "url": "https://www.anchorterminal.com/compare/buttercms-vs-directus"
      },
      {
        "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/contentstack-vs-directus.json",
        "title": "Contentstack vs Directus",
        "url": "https://www.anchorterminal.com/compare/contentstack-vs-directus"
      },
      {
        "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/cosmic-vs-directus.json",
        "title": "Cosmic vs Directus",
        "url": "https://www.anchorterminal.com/compare/cosmic-vs-directus"
      },
      {
        "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/datocms-vs-directus.json",
        "title": "DatoCMS vs Directus",
        "url": "https://www.anchorterminal.com/compare/datocms-vs-directus"
      },
      {
        "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/directus-vs-ghost.json",
        "title": "Directus vs Ghost",
        "url": "https://www.anchorterminal.com/compare/directus-vs-ghost"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-hygraph.json",
        "title": "Directus vs Hygraph",
        "url": "https://www.anchorterminal.com/compare/directus-vs-hygraph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-kontent-ai.json",
        "title": "Directus vs Kontent.ai",
        "url": "https://www.anchorterminal.com/compare/directus-vs-kontent-ai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-payload.json",
        "title": "Directus vs Payload",
        "url": "https://www.anchorterminal.com/compare/directus-vs-payload"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-prismic.json",
        "title": "Directus vs Prismic",
        "url": "https://www.anchorterminal.com/compare/directus-vs-prismic"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-sanity.json",
        "title": "Directus vs Sanity",
        "url": "https://www.anchorterminal.com/compare/directus-vs-sanity"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-storyblok.json",
        "title": "Directus vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/directus-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-strapi.json",
        "title": "Directus vs Strapi",
        "url": "https://www.anchorterminal.com/compare/directus-vs-strapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-webflow.json",
        "title": "Directus vs Webflow",
        "url": "https://www.anchorterminal.com/compare/directus-vs-webflow"
      },
      {
        "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/dotcms-vs-wordpress.json",
        "title": "dotCMS vs WordPress",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-wordpress"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 35,
        "directus": 82,
        "dotcms": 47,
        "edge": "directus",
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 16,
        "directus": 81,
        "dotcms": 65,
        "edge": "directus",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 5,
        "directus": 73,
        "dotcms": 68,
        "edge": "directus",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 5,
        "directus": 68,
        "dotcms": 63,
        "edge": "directus",
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 20,
        "directus": 55,
        "dotcms": 35,
        "edge": "directus",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 11,
        "directus": 86,
        "dotcms": 75,
        "edge": "directus",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 8,
        "directus": 62,
        "dotcms": 54,
        "edge": "directus",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Directus and dotCMS score within a point of each other on agent readiness, 58.1 (C) and 57.7 (C). Both do content management.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "directus": "The built-in MCP server runs under the connecting user's permissions, supports OAuth limited to the MCP endpoint and refuses deletes unless an administrator allows them. A licence check caps the free Core tier at 3 seats, 25 collections and 5 flows, and Directus published more than 30 security advisories in the past year.",
      "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."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/directus-vs-dotcms",
    "json": "https://www.anchorterminal.com/compare/directus-vs-dotcms.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/directus-vs-dotcms.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/directus-vs-dotcms.min.md"
  },
  "markdown": "Directus and dotCMS score within a point of each other on agent readiness, 58.1 (C) and 57.7 (C). Both do content management.\n\n- Directus: grade C, 58.1/100, rank #758 of 1486. Markdown https://www.anchorterminal.com/tools/directus.md · JSON https://www.anchorterminal.com/api/v1/tools/directus.json\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- 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### Directus (C)\n\nGood for: Teams that already keep content in an SQL database and want an agent to edit items, files and the data model under a named user's permissions.\n\nAhead on:\n- Reliability, 82 against 47\n- Schema \u0026 documentation, 81 against 65\n- Agent ergonomics, 73 against 68\n- Security \u0026 auth, 68 against 63\n- Payments \u0026 pricing, 55 against 35\n- Maintenance \u0026 community, 86 against 75\n- Transparency \u0026 trust, 62 against 54\n\nWatch for: Version 12 (10 June 2026) added licence enforcement. The free Core tier allows 3 Studio seats, 25 collections and 5 flows, and an instance over its limits is locked after a grace period\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- Runs on your own machine\n- No incidents deducted, where Directus loses 15 points for them\n\nWatch for: Pre-1.0 package, with the dev docs still pointing at the beta tag\n\n\n## Why the edge\n\n### Reliability: Directus +35\n\n- Directus (82): Read with the local-software lines, since the graded surface is the self-hosted software on the free Core tier. Directus Cloud's status page isn't scored here. Official Docker image `directus/directus` and npm package `directus` 12.6.0, with Node.js 26 or later in `engines` since 12.6.0 and the supported databases listed (20). The Check workflow passed on the 10 most recent runs on main on 8 October, per the 8 October check, not re-read on 1 November, and separate end-to-end and CodeQL workflows exist (25). 339 open issues. The 15 newest carry labels and one to eight comments, but we couldn't read closed counts, and at least 20 advisories were fixed between June and September 2026 (15 of 25). The docs say releases don't follow semantic versioning and any release may break. Breaking changes are listed per version, and 12.1 to 12.6 each had some (7 of 15). Version 12, and the MCP server isn't marked beta (15).\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\n### Payments \u0026 pricing: Directus +20\n\n- Directus (55): Scored with the self-hosted rule, taking prices from the paid options beside the free tier. No x402, MPP or L402 (0). Core is $0, Team is $499 a month on an annual term or $599 monthly, extra seats are $50 each a month, and Directus Cloud hosting is a $99 a month add-on, all public. Enterprise is priced by sales (20). The Core tier is free to self-host with no card and no account, and Cloud has a 14-day trial (20). `ADMIN_EMAIL`, `ADMIN_PASSWORD` and `ADMIN_TOKEN` create the first administrator and a static token at start-up, so the REST route needs no browser. The docs enable the MCP server only through the Studio settings page, so we took 5 off (15 of 20).\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\n### Schema \u0026 documentation: Directus +16\n\n- Directus (81): An OpenAPI file ships in `@directus/specs` with 70 paths, each instance serves its own at `/server/specs/oas`, and every MCP tool has a typed input schema. The spec's `info.version` still reads 10 (22 of 25). llms.txt, llms-full.txt and a raw Markdown copy of every docs page (10). Each tool has a one-sentence description and a `prompt.md` of instructions with worked examples, up to 13 KB for flows, and a `system-prompt` tool sets conventions (16 of 20). Actions are enums and validation uses strict unions per action, but item data, filters, `deep`, and field `schema` and `meta` are open records (8 of 15). The errors page lists HTTP statuses and error codes with the response shape, and guides show REST, GraphQL and SDK examples side by side (14 of 15). A monthly changelog, release notes and breaking-change pages per major version. REST paths carry no version and releases aren't semantic (11 of 15).\n- dotCMS (65): The search tool exposes the instance's own OpenAPI spec, so the contract is machine-readable, though the tools themselves take JavaScript code (20 of 25). llms.txt and Markdown pages on dev.dotcms.com (10). The README says what each tool is for and gives examples; when not to use them isn't stated (12 of 20). Code strings rather than typed parameters for search and execute (4 of 15). Examples for both tools; error behaviour of the sandbox isn't documented (9 of 15). dotCMS changelogs are dated; the MCP package has no changelog (10 of 15). 20+10+12+4+9+10 = 65.\n\n### Maintenance \u0026 community: Directus +11\n\n- Directus (86): v12.6.0 was tagged on 27 October 2026 (30). Seven tagged releases in the 90 days from 3 August (12.3.0, 12.3.1, 12.4.0, 12.4.1, 12.5.0, 12.5.1 and 12.6.0) (20). 339 open issues, the newest labelled and answered, with 170 commits on main since 10 July, per the 8 October check, not re-read on 1 November. Closed-issue counts weren't readable (17 of 25). `@directus/sdk` is current and is the only official SDK. We couldn't reach the official MCP registry, which matters less for a server built into the product (10 of 15). Dependency updates for CVEs land in each release (12.5.1 and 12.6.0 among them), CI passed on main on 8 October and CodeQL runs (9 of 10).\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\n### Transparency \u0026 trust: Directus +8\n\n- Directus (62): The full source is public under MSCL-1.0-GPL, which bars competing use and bypassing the licence key and converts each version to GPL-3.0 after four years. It isn't an OSI licence. The SDK is MIT. The docs index still calls the licence BSL (19 of 30). A self-hosted install keeps content on its owner's servers. The privacy policy of 9 June 2026 says customer data is handled under customer agreements and not the policy, the terms dated 28 April 2025 let the company keep or delete account materials at its discretion, and no public DPA or retention period was found. The trust centre names five subprocessors without locations (16 of 30). Breaking changes are documented per version, upgrades to version 12 got a 30-day grace period and old monthly plans six months. No stated notice period for API changes (10 of 20). Telemetry is documented field by field with an opt-out variable, but it sends the instance's public URL and the opt-out is honoured only where the licence allows, which the pricing table lists for Enterprise alone (10 of 20).\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\n### Agent ergonomics: Directus +5\n\n- Directus (73): Default mode lists 12 tools, the 11 to 30 band, but each definition carries its whole instruction file, 78,855 bytes in total at v12.5.0, so we scored 10 and added 8 for registry mode, which lists three tools and loads details on demand (18 of 25). `limit` (default 100), `offset`, `page`, `fields`, `filter`, `search`, `sort` and `aggregate`, with `QUERY_LIMIT_MAX` as a server cap (20). One error shape with a machine-readable `extensions.code`. Missing items answer `FORBIDDEN`, not 404, by design (17 of 20). Tools set `readOnlyHint` and `destructiveHint`, though one `items` tool covers reads and writes and is marked destructive. No idempotency keys were found in the reviewed documentation (10 of 20). Few required parameters. One official SDK, `@directus/sdk` for JavaScript and TypeScript (8 of 15).\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\n## Score by category\n\n| Category | Weight | Directus | dotCMS | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 82 | 47 | Directus +35 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 81 | 65 | Directus +16 |\n| Agent ergonomics | 13% (16.2 this run) | 73 | 68 | Directus +5 |\n| Security \u0026 auth | 14% (17.5 this run) | 68 | 63 | Directus +5 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 55 | 35 | Directus +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 86 | 75 | Directus +11 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 62 | 54 | Directus +8 |\n| Negative events | ≤15 | -15 | 0 | |\n| **Total** | | **58.1 · C** | **57.7 · C** | |\n\n## Facts side by side\n\n| Fact | Directus | dotCMS |\n| --- | --- | --- |\n| Kind | HTTP API | MCP server |\n| Vendor | Monospace Inc. (Directus) | dotCMS LLC |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | HTTP, Streamable HTTP | stdio |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | MSCL-1.0-GPL (Monospace Sustainable Core Licence 1.0), source-available with a licence key for paid tiers, each version converting to GPL-3.0 after four years. `@directus/sdk` is MIT | BUSL-1.1 |\n| Tools exposed | 12 | 7 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-27 | 2026-09-02 |\n| Terms last updated | no date given | no date given |\n| Privacy policy last updated | 2026-06-09 | 2026-09-08 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | yes | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 38k stars, 23k npm/wk | 43 npm/wk |\n| Agent reviews | 2.8/5 (4) | none |\n\n## How the scores have moved\n\n### Directus\n\n- -9.0 on 1 November 2026 (B to C): correction\n- -0.1 on 28 October 2026: correction\n- +0.1 on 27 October 2026: checklist\n\n### dotCMS\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Directus.** The built-in MCP server runs under the connecting user's permissions, supports OAuth limited to the MCP endpoint and refuses deletes unless an administrator allows them. A licence check caps the free Core tier at 3 seats, 25 collections and 5 flows, and Directus published more than 30 security advisories in the past year.\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## Before you call either\n\n### Directus\n\n1. Connect with OAuth or an `Authorization: Bearer` header. Don't put the token in the URL as `?access_token=`, where it can be logged\n2. Use `/mcp?tool_mode=registry` when the client loads every tool definition. Default mode sends each tool's full instructions, about 79 KB in total\n3. Read the `schema` tool before writing. Item payloads are untyped objects, so field names and types come only from the data model\n4. Publish a version with `POST /versions/{id}/promote` over REST. The MCP `items` tool refuses system collections such as `directus_versions`\n5. Count translation and junction tables against the 25-collection Core limit before creating collections\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## Questions\n\n### Which is better for AI agents, Directus or dotCMS?\n\nDirectus and dotCMS score within a point of each other on agent readiness, 58.1 (C) and 57.7 (C).\n\n### Do Directus and dotCMS need an API key?\n\nDirectus takes an API key or an OAuth sign-in. dotCMS needs an API key.\n\n### Can an agent call Directus and dotCMS without installing anything?\n\nNo hosted endpoint is listed for Directus. dotCMS runs on your own machine, with no hosted endpoint listed.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/directus-vs-dotcms.json, and with the fewest tokens: https://www.anchorterminal.com/compare/directus-vs-dotcms.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"directus\", \"b\": \"dotcms\"}`. From a terminal: `anchor compare directus dotcms`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/directus.json and https://www.anchorterminal.com/api/v1/tools/dotcms.json\n\n## Other comparisons with Directus or dotCMS\n\n- [BCMS vs Directus](https://www.anchorterminal.com/compare/bcms-vs-directus.md)\n- [BCMS vs dotCMS](https://www.anchorterminal.com/compare/bcms-vs-dotcms.md)\n- [ButterCMS vs Directus](https://www.anchorterminal.com/compare/buttercms-vs-directus.md)\n- [ButterCMS vs dotCMS](https://www.anchorterminal.com/compare/buttercms-vs-dotcms.md)\n- [Contentstack vs Directus](https://www.anchorterminal.com/compare/contentstack-vs-directus.md)\n- [Contentstack vs dotCMS](https://www.anchorterminal.com/compare/contentstack-vs-dotcms.md)\n- [Cosmic vs Directus](https://www.anchorterminal.com/compare/cosmic-vs-directus.md)\n- [Cosmic vs dotCMS](https://www.anchorterminal.com/compare/cosmic-vs-dotcms.md)\n- [DatoCMS vs Directus](https://www.anchorterminal.com/compare/datocms-vs-directus.md)\n- [DatoCMS vs dotCMS](https://www.anchorterminal.com/compare/datocms-vs-dotcms.md)\n- [Directus vs Ghost](https://www.anchorterminal.com/compare/directus-vs-ghost.md)\n- [Directus vs Hygraph](https://www.anchorterminal.com/compare/directus-vs-hygraph.md)\n- [Directus vs Kontent.ai](https://www.anchorterminal.com/compare/directus-vs-kontent-ai.md)\n- [Directus vs Payload](https://www.anchorterminal.com/compare/directus-vs-payload.md)\n- [Directus vs Prismic](https://www.anchorterminal.com/compare/directus-vs-prismic.md)\n- [Directus vs Sanity](https://www.anchorterminal.com/compare/directus-vs-sanity.md)\n- [Directus vs Storyblok](https://www.anchorterminal.com/compare/directus-vs-storyblok.md)\n- [Directus vs Strapi](https://www.anchorterminal.com/compare/directus-vs-strapi.md)\n- [Directus vs Webflow](https://www.anchorterminal.com/compare/directus-vs-webflow.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- [dotCMS vs WordPress](https://www.anchorterminal.com/compare/dotcms-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": "Directus vs dotCMS",
        "url": ""
      }
    ],
    "description": "Directus and dotCMS score within a point of each other for content management, 58.1 and 57.7 out of 100. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Directus C 58.1",
      "dotCMS C 57.7",
      "scores"
    ],
    "h1": "Directus vs dotCMS",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/directus-vs-dotcms",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Directus vs dotCMS for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/directus-vs-dotcms"
  },
  "tokens": {
    "markdown": 4600,
    "slim": 2680
  },
  "version": 1
}
