Overview
The plugin turns a Strapi instance into an MCP server, so agents like Claude Code and Cursor can work with CMS content directly. Each person signs in with OAuth rather than sharing an admin token.
It reads the content types and fields of the running instance at connection time. Its content and media tools cover reading, writing, publishing, deleting, and uploads, subject to the signed-in admin’s permissions and the client’s granted scopes.
Motivation
I was copying content between a Strapi admin and a coding agent by hand, which is slow and exactly the kind of thing that should not be manual.
MCP had just landed and I wanted to build something real against it while the spec was still fresh. Learning a protocol properly means implementing it, not reading about it.
Decisions
An agent is a public client with nowhere safe to keep a secret. PKCE protects the code exchange, tokens expire, and a refresh token carries long sessions. Handing an agent a permanent API token would have been easier and considerably worse.
Every call ran as the authenticated user, so an agent could do exactly what that role could do. A parallel permission system would have needed to stay in sync with the real one forever, and would have been wrong the first time they diverged.
Reading and writing content, publishing, deleting, and managing media have separate scopes. Clients need an explicit grant for sensitive actions, and Strapi’s role permissions still apply on every call.
Friction
A bare 403 gives an agent nothing to act on, so errors were rewritten into plain explanations like "your role cannot update this content type". Getting an agent to self-correct rather than retry the same call was most of that work.
A large Strapi instance has a lot of content types, and every tool schema shares space with everything else the agent is holding. Keeping the surface lean enough to be usable on a big site was a constant trim.
The state of it
The limitations, in plain terms. Every project here is something I built and use, not something I am selling.
Stack
Strapi has a built-in MCP server, but its admin-token authentication does not cover my OAuth use cases. That is why I continue to maintain this plugin.
This is an independently maintained alternative. Compatibility with Strapi changes remains my responsibility.
The plugin is inactive until its resource URL is configured, and its clients need explicit grants for publish and delete actions.
Next project