strapi-mcp
by l33tdawg
The strapi-mcp server is a TypeScript-based MCP server that integrates with Strapi CMS. It provides access to Strapi content types and entries through the MCP protocol.
Last updated: N/A
strapi-mcp MCP Server
An MCP server for your Strapi CMS
This is a TypeScript-based MCP server that integrates with Strapi CMS. It provides access to Strapi content types and entries through the MCP protocol, allowing you to:
- Access Strapi content types as resources
- Create, read, update, and delete content entries
- Manage your Strapi content through MCP tools
Features
Resources
- List and access content types via
strapi://content-type/
URIs - Each content type exposes its entries as JSON
- Application/JSON mime type for structured content access
Tools
list_content_types
- List all available content types in Strapiget_entries
- Get entries for a specific content type with optional filtering, pagination, sorting, and population of relationsget_entry
- Get a specific entry by IDcreate_entry
- Create a new entry for a content typeupdate_entry
- Update an existing entrydelete_entry
- Delete an entryupload_media
- Upload a media file to Strapi
Advanced Features
Filtering, Pagination, and Sorting
The get_entries
tool supports advanced query options:
{
"contentType": "api::article.article",
"filters": {
"title": {
"$contains": "hello"
}
},
"pagination": {
"page": 1,
"pageSize": 10
},
"sort": ["title:asc", "createdAt:desc"],
"populate": ["author", "categories"]
}
Resource URIs
Resources can be accessed with various URI formats:
strapi://content-type/api::article.article
- Get all articlesstrapi://content-type/api::article.article/1
- Get article with ID 1strapi://content-type/api::article.article?filters={"title":{"$contains":"hello"}}
- Get filtered articles
Development
Install dependencies:
npm install
Build the server:
npm run build
For development with auto-rebuild:
npm run watch
Installation
For detailed step-by-step instructions on how to deploy and test this MCP server, please see the DEPLOYMENT.md file.
Quick setup:
- Build the server:
npm run build
- Configure your Strapi instance and get an API token
- Add the server config to Claude Desktop:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"strapi-mcp": {
"command": "/path/to/strapi-mcp/build/index.js",
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_API_TOKEN": "your-api-token-here",
"STRAPI_DEV_MODE": "false"
}
}
}
}
Environment Variables
STRAPI_URL
(optional): The URL of your Strapi instance (defaults to http://localhost:1337)STRAPI_API_TOKEN
(required): Your Strapi API token for authenticationSTRAPI_DEV_MODE
(optional): Set to "true" to enable development mode features (defaults to false)
Getting a Strapi API Token
- Log in to your Strapi admin panel
- Go to Settings > API Tokens
- Click "Create new API Token"
- Set a name, description, and token type (preferably "Full access")
- Copy the generated token and use it in your MCP server configuration
Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspector
The Inspector will provide a URL to access debugging tools in your browser.
Usage Examples
Once the MCP server is configured and running, you can use it with Claude to interact with your Strapi CMS. Here are some examples:
Listing Content Types
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "list_content_types",
arguments: {}
)
Getting Entries
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "get_entries",
arguments: {
"contentType": "api::article.article",
"filters": {
"title": {
"$contains": "hello"
}
},
"pagination": {
"page": 1,
"pageSize": 10
},
"sort": ["title:asc"]
}
)
Creating an Entry
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "create_entry",
arguments: {
"contentType": "api::article.article",
"data": {
"title": "My New Article",
"content": "This is the content of my article.",
"publishedAt": "2023-01-01T00:00:00.000Z"
}
}
)
Uploading Media
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "upload_media",
arguments: {
"fileData": "base64-encoded-data-here",
"fileName": "image.jpg",
"fileType": "image/jpeg"
}
)
Accessing Resources
access_mcp_resource(
server_name: "strapi-mcp",
uri: "strapi://content-type/api::article.article"
)