Strapi CMS
About
Integrates with Strapi CMS to enable creating, reading, updating, and deleting content entries with support for filtering, pagination, sorting, and media uploads through URI-based resource patterns.
Details
- Author
- l33tdawg
- Repository
- l33tdawg/strapi-mcp
- GitHub stars
- 20
- Downloads
- 2,043
- License
- MIT License
- Categories
- Database, Other, Productivity, Developer Tools, Design, AI, Media, Frontend, Infrastructure, Automation
- Tags
- #integration
Jump to
- List and read content types as resources
- Create, read, update, and delete entries
- Upload media files via base64 or local file path
- Connect and disconnect relations between entries
- Manage components (list, create, update, get schema)
- Publish and unpublish entries
- Robust error handling and configuration validation
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Strapi CMSCommand (node, npx, python, etc.)npxArguments-
Argument 1
strapi-mcp
Environment-
STRAPI_URL
http://localhost:1337 -
STRAPI_ADMIN_EMAIL
your_admin_email@example.com -
STRAPI_ADMIN_PASSWORD
your_admin_password
Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
-
Argument 1
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
For detailed step-by-step instructions on how to deploy and test this MCP server, please see the DEPLOYMENT.md file.
Quick setup:
1. Build the server: npm run build
2. Configure your Strapi instance and get an API token
3. 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": "npx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
}
}
If you installed from source, use the direct path:
{
"mcpServers": {
"strapi-mcp": {
"command": "/path/to/strapi-mcp/build/index.js",
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
}
}
- STRAPI_URL (optional): The URL of your Strapi instance (defaults to http://localhost:1337)
- STRAPI_ADMIN_EMAIL & STRAPI_ADMIN_PASSWORD (Recommended): Credentials for a Strapi admin user. Required for full functionality like fetching content type schemas.
- STRAPI_API_TOKEN (Optional Fallback): Your Strapi API token. Can be used if admin credentials are not provided, but functionality might be limited based on token permissions.
- STRAPI_DEV_MODE (optional): Set to "true" to enable development mode features (defaults to false)
npm install strapi-mcp
For the latest development features:
git clone https://github.com/l33tdawg/strapi-mcp.git
cd strapi-mcp
npm install
npm run build
Recommended Method (using Cursor MCP Configuration):
For Cursor users, configure the strapi-mcp server in your ~/.cursor/mcp.json file:
"strapi-mcp": {
"command": "npx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
If you installed from source, use the direct path instead:
"strapi-mcp": {
"command": "node",
"args": ["/path/to/strapi-mcp/build/index.js"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
Cursor will manage the server lifecycle automatically when strapi-mcp tools are used.
Alternative Method (using .env file):
Make sure you have built the project (npm run build). Then run the server using Node.js v20.6.0+ with the --env-file flag:
node --env-file=.env build/index.js
Alternative (using environment variables directly):
export STRAPI_URL=http://localhost:1337
export STRAPI_ADMIN_EMAIL=your_admin_email@example.com
export STRAPI_ADMIN_PASSWORD=your_admin_password
strapi-mcp
The server prioritizes authentication methods in this order:
1. Admin Email & Password (STRAPI_ADMIN_EMAIL, STRAPI_ADMIN_PASSWORD)
2. API Token (STRAPI_API_TOKEN)
It's strongly recommended to use Admin Credentials for the best results.
- Admin Credentials: Use the email and password of an existing Super Admin or create a dedicated admin user in your Strapi admin panel (Settings > Administration Panel > Users).
- API Token: (Optional Fallback)
1. Log in to your Strapi admin panel
2. Go to Settings > API Tokens
3. Click "Create new API Token"
4. Set a name, description, and token type (preferably "Full access")
5. Copy the generated token and use it in your MCP server configuration
Cannot connect to Strapi instance: Authentication failed. Check your API token or admin credentials.
```
Solution:
- Verify your API token has proper permissions (preferably "Full access")
- Check admin email/password are correct
- Ensure the admin user exists and is active
list_content_types
List all available content types in Strapi.
get_entries
Get entries for a specific content type with optional filtering, pagination, sorting, and population of relations.
get_entry
Get a specific entry by ID.
create_entry
Create a new entry for a content type.
update_entry
Update an existing entry.
delete_entry
Delete an entry.
upload_media
Upload a media file to Strapi (max ~750KB file due to base64 context limits).
upload_media_from_path
Upload a media file from local file path (max 10MB, avoids context overflow).
get_content_type_schema
Get the schema (fields, types, relations) for a specific content type.
connect_relation
Connect related entries to an entry's relation field.
disconnect_relation
Disconnect related entries from an entry's relation field.
create_content_type
Create a new content type using the Content-Type Builder API (Requires Admin privileges).
publish_entry
Publish a specific entry.
unpublish_entry
Unpublish a specific entry.
list_components
List all available components in Strapi.
get_component_schema
Get the schema for a specific component.
create_component
Create a new component.
update_component
Update an existing component.
- list_content_types - List all available content types in Strapi
- get_entries - Get entries for a specific content type with optional filtering, pagination, sorting, and population of relations
- get_entry - Get a specific entry by ID
- create_entry - Create a new entry for a content type
- update_entry - Update an existing entry
- delete_entry - Delete an entry
- upload_media - Upload a media file to Strapi (max ~750KB file due to base64 context limits)
- upload_media_from_path - Upload a media file from local file path (max 10MB, avoids context overflow)
- get_content_type_schema - Get the schema (fields, types, relations) for a specific content type.
- connect_relation - Connect related entries to an entry's relation field.
- disconnect_relation - Disconnect related entries from an entry's relation field.
- create_content_type - Create a new content type using the Content-Type Builder API (Requires Admin privileges).
- publish_entry - Publish a specific entry.
- unpublish_entry - Unpublish a specific entry.
- list_components - List all available components in Strapi.
- get_component_schema - Get the schema for a specific component.
- create_component - Create a new component.
- update_component - Update an existing component.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"strapi cms": {
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
},
"args": [
"strapi-mcp"
],
"command": "npx"
}
}
}
Linux
{
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
},
"args": [
"strapi-mcp"
],
"command": "npx"
}
Macos
{
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
},
"args": [
"strapi-mcp"
],
"command": "npx"
}
Windows
{
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
},
"args": [
"/c",
"npx",
"strapi-mcp"
],
"command": "cmd"
}
Strapi MCP
An MCP server for Strapi CMS, providing access to content types and entries through the Model Context Protocol.
Overview
This MCP server integrates with any Strapi CMS instance to provide:
- Access to Strapi content types as resources
- Tools to create and update content types in Strapi
- Tools to manage content entries (create, read, update, delete)
- Support for Strapi in development mode
- Robust error handling with clear diagnostics and troubleshooting guidance
- Configuration validation to prevent common setup issues
Setup
### Environment Variables
It's recommended to use a .env file in the project root to store your credentials.
- STRAPI_URL: The URL of your Strapi instance (default: http://localhost:1337)
- STRAPI_ADMIN_EMAIL: The email address for a Strapi admin user (Recommended for full functionality, especially schema access).
- STRAPI_ADMIN_PASSWORD: The password for the Strapi admin user (Recommended).
- STRAPI_API_TOKEN: (Optional Fallback) An API token. Can be used if admin credentials are not provided, but may have limited permissions.
- STRAPI_DEV_MODE: Set to "true" to enable development mode features (defaults to false).
Example .env file:
STRAPI_URL=http://localhost:1337
STRAPI_ADMIN_EMAIL=your_admin_email@example.com
STRAPI_ADMIN_PASSWORD=your_admin_password
# STRAPI_API_TOKEN=your_api_token_here # Optional
Important:
- Add
.env to your .gitignore file to avoid committing credentials- Avoid placeholder values like
"strapi_token" - the server validates and rejects common placeholders### Installation
Install from npm (Recommended)
npm install strapi-mcp
Install from source (Development)
For the latest development features:git clone https://github.com/l33tdawg/strapi-mcp.git
cd strapi-mcp
npm install
npm run build
### Running
Recommended Method (using Cursor MCP Configuration):
For Cursor users, configure the strapi-mcp server in your ~/.cursor/mcp.json file:
"strapi-mcp": {
"command": "npx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
If you installed from source, use the direct path instead:
"strapi-mcp": {
"command": "node",
"args": ["/path/to/strapi-mcp/build/index.js"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
Cursor will manage the server lifecycle automatically when strapi-mcp tools are used.
Alternative Method (using .env file):
Make sure you have built the project (npm run build). Then run the server using Node.js v20.6.0+ with the --env-file flag:
node --env-file=.env build/index.js
Alternative (using environment variables directly):
export STRAPI_URL=http://localhost:1337
export STRAPI_ADMIN_EMAIL=your_admin_email@example.com
export STRAPI_ADMIN_PASSWORD=your_admin_password
export STRAPI_API_TOKEN=your-api-token # Optional fallback
export STRAPI_DEV_MODE=true # optional
Run the globally installed package (if installed via npm install -g)
strapi-mcp
Or run the local build directly
node build/index.js
Features
- List and read content types
- Get, create, update, and delete entries
- Upload media files
- Connect and disconnect relations
- Get content type schemas
## Changelog
### 0.2.3 - 2025-07-25
- CRITICAL FIX: Fixed timeout issue in relation tools - connect_relation and disconnect_relation now properly handle validation errors instead of timing out
- IMPROVED ERROR HANDLING: All validation errors now return proper error messages instead of causing tool timeouts
### 0.2.2 - 2025-07-25
- ENHANCED RELATION TOOLS: Improved error handling for connect_relation and disconnect_relation with detailed validation and troubleshooting messages
- FIXED CREATE_COMPONENT: Fixed parameter validation bug - now properly validates individual parameters instead of single object
- BETTER ERROR DIAGNOSTICS: Added specific error messages for invalid relation fields, non-existent entries, and malformed IDs
- All 20 tools now working at 100% with robust error handling and validation
### 0.2.0 - 2025-07-25
- CRITICAL BUG FIX: Fixed validateStrapiConnection causing "undefined response status" error
- RESOLVED MCP CONNECTION ISSUE: Fixed the "green light but doesn't work" problem with AI tools
- IMPROVED ERROR HANDLING: Better connection validation logic with proper admin auth handling
- Users should update to this version if experiencing MCP connection issues with AI tools
### 0.1.9 - 2025-07-02
- CONTEXT WINDOW OVERFLOW FIX: Added size limits and response filtering to prevent base64 files from overwhelming context window
- NEW TOOL: Added upload_media_from_path - Upload files from local file paths (max 10MB) to avoid base64 context issues
- ENHANCED UPLOAD_MEDIA: Added 1MB base64 size limit (~750KB file) with clear error messages about context overflow
- IMPROVED LOGGING: Truncated base64 data in logs to prevent log spam and context overflow
- RESPONSE FILTERING: Automatically filters large base64 strings from API responses to prevent echo overflow
### 0.1.8 - 2025-06-12
- MAJOR BUG FIX: Replaced silent failures with descriptive error messages when content types or entries cannot be fetched
- Added Configuration Validation: Detects placeholder API tokens and exits with helpful error messages
- Added Connection Validation: Tests Strapi connectivity before attempting operations with specific error diagnostics
- Enhanced Error Handling: Comprehensive error diagnostics that distinguish between legitimate empty collections vs actual errors
- Improved Troubleshooting: All error messages include specific steps to resolve common configuration issues
### 0.1.7 - 2025-05-17
- Added publish_entry and unpublish_entry tools: Complete content lifecycle management
- Added Component Management: list_components, get_component_schema, create_component, update_component
- Added delete_content_type tool: Delete existing content types via the Content-Type Builder API
- Enhanced Admin Authentication: Better error handling and token management for all API operations
### 0.1.6
- Added create_content_type tool: Allows creating new content types via the Content-Type Builder API (requires admin credentials).
- Prioritized Admin Credentials: Updated logic to prefer admin email/password for fetching content types and schemas, improving reliability.
- Updated Documentation: Clarified authentication methods and recommended running procedures.
### 0.1.5
- Improved content type discovery with multiple fallback methods
- Added more robust error handling and logging
- Enhanced schema inference for content types
0.1.4
- Improved error handling with more specific error codes - AddedResourceNotFound and AccessDenied error codes
- Better error messages for common API errors
0.1.3
- Initial public releaseLicense
MIT
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 viastrapi://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 Strapi
- get_entries - Get entries for a specific content type with optional filtering, pagination, sorting, and population of relations
- get_entry - Get a specific entry by ID
- create_entry - Create a new entry for a content type
- update_entry - Update an existing entry
- delete_entry - Delete an entry
- upload_media - Upload a media file to Strapi (max ~750KB file due to base64 context limits)
- upload_media_from_path - Upload a media file from local file path (max 10MB, avoids context overflow)
- get_content_type_schema - Get the schema (fields, types, relations) for a specific content type.
- connect_relation - Connect related entries to an entry's relation field.
- disconnect_relation - Disconnect related entries from an entry's relation field.
- create_content_type - Create a new content type using the Content-Type Builder API (Requires Admin privileges).
- publish_entry - Publish a specific entry.
- unpublish_entry - Unpublish a specific entry.
- list_components - List all available components in Strapi.
- get_component_schema - Get the schema for a specific component.
- create_component - Create a new component.
- update_component - Update an existing component.
### Advanced Features
Filtering, Pagination, and Sorting
Theget_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 articles
- strapi://content-type/api::article.article/1 - Get article with ID 1
- strapi://content-type/api::article.article?filters={"title":{"$contains":"hello"}} - Get filtered articles
Publishing and Unpublishing Content
The publish_entry and unpublish_entry tools provide control over the content lifecycle:
{
"contentType": "api::article.article",
"id": "1"
}
These tools utilize the admin API paths for publishing/unpublishing actions, with a fallback to directly updating the publishedAt field if admin permissions are not available.
Component Management
Strapi components can be managed with the following tools:
- list_components: Get all available components
- get_component_schema: View a specific component's structure
- create_component: Create a new component with specified fields
- update_component: Modify an existing component
Example of creating a component:
{
"componentData": {
"displayName": "Security Settings",
"category": "security",
"icon": "shield",
"attributes": {
"enableTwoFactor": {
"type": "boolean",
"default": false
},
"passwordExpiration": {
"type": "integer",
"min": 0
}
}
}
}
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:
1. Build the server: npm run build
2. Configure your Strapi instance and get an API token
3. 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": "npx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
}
}
If you installed from source, use the direct path:
{
"mcpServers": {
"strapi-mcp": {
"command": "/path/to/strapi-mcp/build/index.js",
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "your_admin_email@example.com",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
}
}
Environment Variables
- STRAPI_URL (optional): The URL of your Strapi instance (defaults to http://localhost:1337)
- STRAPI_ADMIN_EMAIL & STRAPI_ADMIN_PASSWORD (Recommended): Credentials for a Strapi admin user. Required for full functionality like fetching content type schemas.
- STRAPI_API_TOKEN (Optional Fallback): Your Strapi API token. Can be used if admin credentials are not provided, but functionality might be limited based on token permissions.
- STRAPI_DEV_MODE (optional): Set to "true" to enable development mode features (defaults to false)
### Authentication Priority
The server prioritizes authentication methods in this order:
1. Admin Email & Password (STRAPI_ADMIN_EMAIL, STRAPI_ADMIN_PASSWORD)
2. API Token (STRAPI_API_TOKEN)
It's strongly recommended to use Admin Credentials for the best results.
### Getting Strapi Credentials
- Admin Credentials: Use the email and password of an existing Super Admin or create a dedicated admin user in your Strapi admin panel (Settings > Administration Panel > Users).
- API Token: (Optional Fallback)
1. Log in to your Strapi admin panel
2. Go to Settings > API Tokens
3. Click "Create new API Token"
4. Set a name, description, and token type (preferably "Full access")
5. Copy the generated token and use it in your MCP server configuration
Troubleshooting
Common Issues and Solutions:
1. Placeholder API Token Error
[Error] STRAPI_API_TOKEN appears to be a placeholder value...
Solution: Replace "strapi_token" or "your-api-token-here" with a real API token from your Strapi admin panel.
2. Connection Refused Error
Cannot connect to Strapi instance: Connection refused. Is Strapi running at http://localhost:1337?
Solution:
- Ensure Strapi is running: npm run develop or yarn develop
- Check if the URL in STRAPI_URL is correct
- Verify your database (MySQL/PostgreSQL) is running
3. Authentication Failed
Cannot connect to Strapi instance: Authentication failed. Check your API token or admin credentials.
Solution:
- Verify your API token has proper permissions (preferably "Full access")
- Check admin email/password are correct
- Ensure the admin user exists and is active
4. Context Window Overflow with File Uploads
```Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





