Strapi
Open-core headless CMS: content types in the admin, auto-generated REST and GraphQL APIs, env-file config.
Strapi is a Node.js headless CMS: model content types visually, get REST and GraphQL endpoints for each, with draft and publish, media library, i18n, and roles. The Community core is MIT; features under ee/ are commercially licensed and Strapi Cloud is the hosted edition. Configuration is config/*.js plus .env. The official REST API is how an agent creates, publishes, and uploads; no Strapi-org MCP was found.
- I need a content API for a site or app fast, and editors who want a normal CMS screen
- I want my agent to push entries and media through a documented API while the content model stays under my control
- Open-core: anything under ee/ is not MIT; the license file also says a registered Cloud account changes the terms
- All content types are private by default; grant public access or use an API token before the API answers
- No official Docker image; generate one with npx @strapi-community/dockerize
- Content types cannot be created through the API; define them in the admin or as schema.json files
Last activity Sep 2, 2026. Fit: adaptable 3, operable 3.
Editions
Community · Free open source
- Clone
git clone https://github.com/strapi/strapi - Install
npx create-strapi@latest my-project
Growth and Enterprise (self-hosted) · Free closed source
- HostedOpen the hosted app
Strapi Cloud Starter · $35 per month closed source
- HostedOpen the hosted app
Strapi Cloud Pro · $90 per month closed source
No distribution recorded.
Strapi Cloud Business · $450 per month closed source
No distribution recorded.
Adaptable: what is yours to change
Make it yours
Light edit24 things to editdeployment-plus-code surface
The named .env vars (HOST, PORT, APP_KEYS, *_SALT, *_SECRET, DATABASE_*) and config/server.js, database.js, admin.js are deployment configuration. Adapting Strapi to a business means defining content types, which the admin Content-Type Builder writes as src/api/<type>/content-types/<type>/schema.json in development mode only, then editing code in src/api/<type>/controllers, services, routes and policies, lifecycle hooks, and config/plugins.js and config/middlewares.js.
- Env vars
HOSTPORTAPP_KEYSAPI_TOKEN_SALTADMIN_JWT_SECRETJWT_SECRETTRANSFER_TOKEN_SALTDATABASE_CLIENTDATABASE_FILENAMEADMIN_PATHSTRAPI_ADMIN_BACKEND_URLNODE_ENVSTRAPI_LICENSE- Config files
.envconfig/server.jsconfig/database.jsconfig/admin.jsconfig/plugins.jsconfig/middlewares.jsconfig/env/<environment>/src/api/*/content-types/*/schema.jsonsrc/api/*/routes/src/api/*/controllers/src/api/*/services/- Prompt files
- none
- Accounts you need
- Strapi Cloud (hosted edition only)
Source
- github.com/strapi/strapi
- MIT core with EE license under ee/ (GitHub NOASSERTION) license
- Last commit Sep 2, 2026
- 73,062 stars
Operable: what an agent can drive
Interface
OfficialAPIpublished by the builderremote or local
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 6 of 10 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Create, read, update, and delete entries | Reachable | REST API documents CRUD by documentId |
| Save drafts and publish | Reachable | REST API ?status=draft with Draft & Publish enabled |
| Upload media | Reachable | Upload API at /api/upload |
| Populate relations and filter queries | Reachable | REST API populate, filters, sort, pagination parameters |
| Query over GraphQL | Reachable | official GraphQL plugin |
| Manage end users and permissions | Reachable | Users & Permissions plugin exposes its own API endpoints |
| Localize entries per locale | Undetermined | i18n is core; locale parameter not confirmed on the fetched page |
| Define content types and components | Not reachable | REST docs: content types are built in the admin Content-Type Builder; components have no endpoints |
| Manage admin roles and API tokens | Not reachable | admin panel only |
| Customize the admin panel | Not reachable | code in src/admin |
Code stack
- Languages
- TypeScriptJavaScript
- Frameworks
- Node.jsKoaReact (admin)
- Package manager
- npm or yarn
- Database
- SQLitePostgreSQLMySQLMariaDB
- Hosting target
- any Node hostDocker (community dockerize)Strapi Cloud
- Built
- Human-written (recorded, never ranked)
Skills
One repo tooling skill covering git conventions for Strapi contributors.
- Kind
- contributor
- Paths
.ai/skills/git-conventions/SKILL.md
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: self-hosted Node.js CMS with admin panel and generated APIs | 95% |
| executionModel | no model at runtime; Strapi AI is an optional cloud add-on | 90% |
| operability | docs.strapi.io/cms/api/rest (Builder domain) documents CRUD, draft and publish, upload, API tokens; GitHub search of the strapi org found no MCP repo | 90% |
| effort | docs.strapi.io/cms/configurations/environment lists the env vars and config/ files | 85% |
| editions | LICENSE: MIT Expat for the Community Edition, EE license under ee/; strapi.io/pricing: Cloud Starter $35, Pro $90, Business $450 per month | 80% |
| active | pushedAt 2026-09-02 | – |
| provenance | Strapi Solutions SAS since 2015; no vibe-coded claim | 90% |
| reach | 85% |
Open questions
- Growth and Enterprise self-hosted license prices
- Does the REST API accept a locale parameter for i18n entries (not on the fetched page)?
Sources
- github.com/strapi/strapi sourcing:content-publishing:curated
- docs.strapi.io/cms/api/rest analysis:content-publishing
- docs.strapi.io/cms/configurations/environment analysis:content-publishing
- strapi.io/pricing analysis:content-publishing