[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"pack-detail-headless-cms-for-ai-zh":3,"seo:pack:headless-cms-for-ai:zh":58},{"code":4,"message":5,"data":6},200,"操作成功",{"pack":7},{"slug":8,"icon":9,"tone":10,"status":11,"status_label":12,"title":13,"description":14,"items":15,"install_cmd":57},"headless-cms-for-ai","📦","#4D7C0F","stable","稳定","AI 友好 Headless CMS","Strapi \u002F Medusa \u002F Vendure \u002F Directus \u002F Hasura — 默认开 REST + GraphQL 的内容 \u002F 电商后端，agent 直接接。",[16,28,35,43,50],{"id":17,"uuid":18,"slug":19,"title":20,"description":21,"author_name":22,"view_count":23,"vote_count":24,"lang_type":25,"type":26,"type_label":27},899,"f454ef61-349e-11f1-9bc6-00163e2b0d79","strapi-leading-open-source-headless-cms-f454ef61","Strapi — Leading Open Source Headless CMS","Strapi is the most popular open-source headless CMS with 71K+ stars. Visual content-type builder, REST & GraphQL APIs, RBAC, and extensive plugin marketplace.","Script Depot",322,0,"en","skill","Skill",{"id":29,"uuid":30,"slug":31,"title":32,"description":33,"author_name":22,"view_count":34,"vote_count":24,"lang_type":25,"type":26,"type_label":27},932,"ca8df7e8-34bf-11f1-9bc6-00163e2b0d79","medusa-open-source-headless-commerce-engine-ca8df7e8","Medusa — Open Source Headless Commerce Engine","Medusa is an open-source composable commerce engine built with Node.js. Modular architecture, REST & JS SDK, and full customization for building custom storefronts and commerce flows.",335,{"id":36,"uuid":37,"slug":38,"title":39,"description":40,"author_name":41,"view_count":42,"vote_count":24,"lang_type":25,"type":26,"type_label":27},894,"6123e157-349e-11f1-9bc6-00163e2b0d79","vendure-open-source-headless-e-commerce-framework-6123e157","Vendure — Open Source Headless E-Commerce Framework","Vendure is a headless commerce framework built with TypeScript, NestJS, and GraphQL. Extensible plugin system, multi-channel support, and full API-first architecture.","AI Open Source",305,{"id":44,"uuid":45,"slug":46,"title":47,"description":48,"author_name":41,"view_count":49,"vote_count":24,"lang_type":25,"type":26,"type_label":27},898,"f431a500-349e-11f1-9bc6-00163e2b0d79","directus-open-source-backend-headless-cms-any-database-f431a500","Directus — Open Source Backend & Headless CMS for Any Database","Directus wraps any SQL database with instant REST & GraphQL APIs, an admin app, auth, file storage, and automation — no migration or proprietary schema needed.",304,{"id":51,"uuid":52,"slug":53,"title":54,"description":55,"author_name":41,"view_count":56,"vote_count":24,"lang_type":25,"type":26,"type_label":27},933,"caafaa4a-34bf-11f1-9bc6-00163e2b0d79","hasura-instant-graphql-rest-apis-your-database-caafaa4a","Hasura — Instant GraphQL & REST APIs on Your Database","Hasura generates instant, real-time GraphQL and REST APIs on PostgreSQL, MySQL, SQL Server, and MongoDB with fine-grained access control, event triggers, and remote schemas.",331,"tokrepo install pack\u002Fheadless-cms-for-ai",{"pageType":59,"pageKey":8,"locale":60,"title":61,"metaDescription":62,"h1":13,"tldr":63,"bodyMarkdown":64,"faq":65,"schema":81,"internalLinks":91,"citations":104,"wordCount":117,"generatedAt":118},"pack","zh","AI 友好 Headless CMS：Strapi\u002FMedusa\u002FDirectus\u002FHasura","Strapi \u002F Medusa \u002F Vendure \u002F Directus \u002F Hasura —— 默认开 REST + GraphQL 的内容 \u002F 电商后端，agent 直接接。TokRepo 一条命令装齐。","五个开源内容 \u002F 电商后端，默认就开 REST + GraphQL 端点 —— 把 AI agent 接进真实业务的最干净表面。","## 这个 pack 装了什么\n\n这个包收齐了**五个值得装的 headless 后端**，当你要让 AI agent 读或写真实业务数据 —— 内容 \u002F 商品 \u002F 订单 \u002F 用户 —— 又不想自己手写 CRUD 端点时用。\n\n| # | 工具 | 领域 | agent 为什么喜欢 |\n|---|---|---|---|\n| 1 | Strapi | 内容 | 默认 REST + GraphQL，插件生态 |\n| 2 | Medusa | 电商 | Headless 电商引擎，完整 admin API |\n| 3 | Vendure | 电商 | TypeScript 优先，强类型 |\n| 4 | Directus | data → API | 从任意 SQL 数据库生成 REST + GraphQL |\n| 5 | Hasura | data → API | GraphQL 直接编译成 Postgres 查询 |\n\n分工是有意的：编辑型内容用 Strapi，商品 + 订单数据用 Medusa \u002F Vendure，任意 SQL 表面用 Directus \u002F Hasura。多数生产系统按主导用例从每行各挑一个。\n\n## 为什么 headless 对 agent 重要\n\n传统 CMS 吐 HTML，agent 消费 HTML 不行。Headless CMS 吐带类型的 JSON 和 GraphQL schema。差距复利：\n\n- **Schema 内省**：GraphQL 端点自描述。Agent 调 `__schema` 就能发现有哪些字段、返回什么、接受什么参数。不用手维护 API 文档\n- **写操作安全**：REST + GraphQL 端点用输入类型显式声明写操作。Agent 发送前可以校验，server 在传输层就拒绝畸形 payload，而不是写到一半\n- **权限**：每个工具都自带 RBAC。可以给 agent 限定 token，只读特定内容类型或只能改特定资源，带审计日志\n- **多语言 \u002F i18n**：Strapi 和 Directus 有一等公民 locale 支持，agent 生成或翻译内容时关键\n\n这些属性就是为什么 headless CMS 对人工内容团队可能过度，但对 agent 驱动的产品往往是正确底座。\n\n## 一条命令装齐\n\n```bash\n# 装整个 pack\ntokrepo install pack\u002Fheadless-cms-for-ai\n\n# 或者单装一个后端\ntokrepo install strapi\ntokrepo install hasura\n```\n\n每个工具装成一段 Docker compose 加一个懂工具 API 表面的 Claude Code skill。Skill 暴露带类型的方法如 `strapi.list_articles({ filters })`，agent 不用手拼 REST URL。\n\n## 常见坑\n\n- **agent 和 server 间的 schema 漂移**：在 admin UI 加内容类型时，agent 本地 schema 缓存就过期。每次会话启动重新内省，或者挂 webhook 让 agent 在内容类型变化时失效缓存\n- **agent 的 N+1 查询**：agent 倾向一条一条拉。用批量端点（Strapi 的 `populate=*`，Hasura 的嵌套选择），并控制查询预算 —— 设 agent 级别的限流\n- **public 读 token**：很容易就给 agent 开宽口读 token。别。范围限定到具体 collection，角色变化时撤销。这五个工具都有细粒度权限 UI\n- **写操作幂等性**：agent 会重试。如果 agent 在网络波动后重试 `createOrder`，你会拿到重复。用幂等 key（Medusa 原生支持，其他要叠 request_id 字段）\n- **备份**：Headless CMS 集中内容，数据库坏了你丢一年编辑工作。在让 agent 写入生产之前先建好每日快照\n\n## 常见误解\n\n- *「Hasura 和 Directus 可互换」*：「把 SQL 暴露成 GraphQL」上重叠，但受众不同。Hasura 是给想要 Postgres 之上薄 GraphQL 蒙皮的工程师；Directus 是给团队还要内容 admin UI 的。只要 API 用 Hasura；非工程师要编辑数据用 Directus\n- *「Strapi 能替代 Medusa 做电商」*：Strapi 处理内容很漂亮，但缺订单工作流 \u002F 支付 \u002F 库存原语。这些用 Medusa 或 Vendure，然后让 Strapi 管商品邻接的内容（博客 \u002F 营销页）\n- *「agent 用 GraphQL 永远比 REST 好」*：有时是 —— schema 内省很爽。但对简单 list\u002Fget，REST 端点更易缓存、更易让 agent 用 HTTP 层工具组合。五个工具都说两种；按调用挑\n\n## 跟其他 pack 的关系\n\n- **Postgres for Agent**是 Hasura 和 Directus 下面的数据层\n- **MCP 服务器全家桶**包含这些 CMS 的 MCP 包装，让 agent 通过 MCP 而不是裸 HTTP 用\n- **AI 应用生成器**从前端侧消费这些 GraphQL 端点",[66,69,72,75,78],{"q":67,"a":68},"这个 pack 免费吗？","免费 —— Strapi \u002F Medusa \u002F Vendure \u002F Directus \u002F Hasura 都是宽松许可证下的开源，TokRepo 安装免费。有些 vendor 提供付费云托管（Strapi Cloud \u002F Hasura Cloud），但 pack 里的自托管版本功能完整。你只为跑它们的数据库和算力付费。",{"q":70,"a":71},"跟 Contentful 或 Sanity 有啥区别？","Contentful 和 Sanity 是 SaaS headless CMS —— 上手更容易，但它们把数据存在自己服务器上，按 API 调用收费，agent 当主要消费者时会很贵。这个 pack 里的五个工具都可自托管，意味着 agent 调用是真人用户 10× 时成本可预测。",{"q":73,"a":74},"Claude Code \u002F Cursor 都能用吗？","都能。每个后端配一个 Claude Code skill（包装其 REST + GraphQL 端点的带类型 wrapper）加一个 Cursor 和 Codex CLI 都能消费的通用 OpenAPI\u002FSDL schema。Claude Code 路径更精致 —— 会话启动时 schema 内省、带类型的错误 —— 但底层 API 是 vendor 标准，任何 AI 编辑器都能调。",{"q":76,"a":77},"跟手写 CRUD 端点比有啥不同？","手写在一两个端点上更快，到十个就更慢。这些工具从你的数据模型自动生成 API，加新内容类型或电商属性以分钟而非 PR 计。它们还强制一致性 —— 每个端点遵循同样的鉴权 \u002F 分页 \u002F 错误模式，对要学习这个表面的 agent 很重要。",{"q":79,"a":80},"运维坑？","权限 scope 会很快混乱。每个 agent 动作开始都要个新权限，团队批准，三个月后 agent 对一切都有上帝模式。安排季度审计：列每个活跃 token，检查它过去 30 天实际用了哪些 scope，剪掉其他。五个工具都记 token 使用，审计是 SQL 查询不是猜。",{"@context":82,"@type":83,"name":84,"description":85,"numberOfItems":86,"publisher":87},"https:\u002F\u002Fschema.org","CollectionPage","Headless CMS for AI","Five headless CMS \u002F commerce backends that expose REST + GraphQL endpoints AI agents can call out of the box.",5,{"@type":88,"name":89,"url":90},"Organization","TokRepo","https:\u002F\u002Ftokrepo.com",[92,96,100],{"url":93,"anchor":94,"reason":95},"\u002Fzh\u002Fpacks\u002Fpostgres-for-agents","Postgres for Agent","这些 CMS 后端下面的数据层",{"url":97,"anchor":98,"reason":99},"\u002Fzh\u002Fpacks\u002Fmcp-server-stack","MCP 服务器全家桶","通过 MCP 把 CMS API 暴露给 agent",{"url":101,"anchor":102,"reason":103},"\u002Fzh\u002Fpacks\u002Fai-app-builders","AI 应用生成器","消费这些 GraphQL\u002FREST 端点的前端工具",[105,109,113],{"claim":106,"source_name":107,"source_url":108},"Strapi exposes content via REST and GraphQL out of the box","Strapi documentation","https:\u002F\u002Fdocs.strapi.io\u002Fdev-docs\u002Fapi\u002Frest",{"claim":110,"source_name":111,"source_url":112},"Hasura compiles GraphQL queries to Postgres","hasura\u002Fgraphql-engine","https:\u002F\u002Fgithub.com\u002Fhasura\u002Fgraphql-engine",{"claim":114,"source_name":115,"source_url":116},"Directus generates REST and GraphQL APIs from any SQL database","Directus docs","https:\u002F\u002Fdocs.directus.io\u002Freference\u002Fintroduction.html",549,"2026-05-02T15:40:00Z"]