strapi-mcp-server
by: misterboe
strapi mcp server
📌Overview
Purpose: The Strapi MCP Server serves as a Model Context Protocol server that allows AI assistants to interact seamlessly with the Strapi CMS through a standardized interface for content management.
Overview: This server provides a framework for performing REST API operations and handling various content types in Strapi, while ensuring a robust set of features including security, schema validation, and multi-version support.
Key Features:
-
Schema Introspection: Automatically retrieves and validates the structure of data models, ensuring accurate interactions with the CMS.
-
REST API Support: Facilitates CRUD operations with built-in validation and version handling, enhancing efficiency in managing content.
Strapi MCP Server
A Model Context Protocol server for interacting with Strapi CMS. This server enables AI assistants to interact with your Strapi instance through a standardized interface, supporting content types and REST API operations.
⚠️ IMPORTANT DISCLAIMER: This software has been developed with the assistance of AI technology. It is provided as-is and should NOT be used in production environments without thorough testing and validation. The code may contain errors, security vulnerabilities, or unexpected behavior. Use at your own risk for research, learning, or development purposes only.
Changelog
Version 2.3.0 - Documentation & Configuration Enhancement
- Added comprehensive project documentation in CLAUDE.md
- Expanded configuration options with better version detection
- Enhanced troubleshooting guides for common issues
- Detailed REST API documentation with practical examples
- Best practices guide for content management
- Fixed version parsing from different format patterns
- Improved error messaging with version-specific guidance
Version 2.2.0 - Security & Version Handling Update
- Added strict write protection policy
- Enhanced version format support (5.*, 4.1.5, v4, etc.)
- Integrated documentation into server capabilities
- Removed connect prompt (now in capabilities)
- Improved error handling and validation
- Added version-specific differences guide
- Enhanced server capabilities documentation
Version 2.1.0
- Improved compatibility with both Strapi v4 and v5
- Removed automatic validation to support different data structures between versions
- Enhanced error messages with version-specific hints
- Simplified request handling to give clients more control
- Updated documentation with clear examples for both versions
Features
- Schema introspection
- REST API support with validation
- Media upload handling
- JWT authentication
- Content type management
- Image processing with format conversion
- Multiple server support
- Automatic schema validation
- Write protection policy
- Integrated documentation
- Version compatibility management
Installation
Use this server directly with npx in your Claude Desktop configuration:
{
"mcpServers": {
"strapi": {
"command": "npx",
"args": ["-y", "@bschauer/strapi-mcp-server@2.5.0"]
}
}
}
Configuration
Create a configuration file at ~/.mcp/strapi-mcp-server.config.json
:
{
"myserver": {
"api_url": "http://localhost:1337",
"api_key": "your-jwt-token-from-strapi-admin",
"version": "5.*" // Optional: Specify Strapi version (e.g., "5.*", "4.1.5", "v4")
}
}
You can configure multiple Strapi instances by adding them to this file.
Version Configuration
Supported version formats:
- Wildcard: "5.", "4."
- Specific: "4.1.5", "5.0.0"
- Simple: "v4", "v5"
This allows version-specific guidance and proper handling of API differences.
Getting a JWT Token
- Log in to your Strapi admin panel
- Create an API token with appropriate permissions
- Add the token to your config file under the appropriate server name
Usage
List Available Servers
strapi_list_servers();
// Includes version information and differences between v4 and v5
Content Types
// Get all content types from a specific server
strapi_get_content_types({
server: "myserver",
});
// Get components with pagination
strapi_get_components({
server: "myserver",
page: 1,
pageSize: 25,
});
REST API
Comprehensive CRUD operations with built-in validation and version-specific handling:
// Query content with filters
strapi_rest({
server: "myserver",
endpoint: "api/articles",
method: "GET",
params: {
filters: {
title: {
$contains: "search term",
},
},
},
});
// Create new content
strapi_rest({
server: "myserver",
endpoint: "api/articles",
method: "POST",
body: {
data: {
title: "New Article",
content: "Article content",
category: "news",
},
},
});
// Update content
strapi_rest({
server: "myserver",
endpoint: "api/articles/123",
method: "PUT",
body: {
data: {
title: "Updated Title",
content: "Updated content",
},
},
});
// Delete content
strapi_rest({
server: "myserver",
endpoint: "api/articles/123",
method: "DELETE",
});
Media Upload
// Upload image with automatic optimization
strapi_upload_media({
server: "myserver",
url: "https://example.com/image.jpg",
format: "webp",
quality: 80,
metadata: {
name: "My Image",
caption: "Image Caption",
alternativeText: "Alt Text",
},
});
Version Differences (v4 vs v5)
Key differences handled automatically:
v4
- Uses numeric IDs
- Nested attribute structure
- Data wrapper in responses
- Traditional REST patterns
- External i18n plugin
v5
- Document-based IDs
- Flat data structure
- Direct attribute access
- Enhanced JWT security
- Integrated i18n support
- New Document Service API
Security Features
Write Protection Policy
- All write operations require explicit authorization
- Protected operations include: POST, PUT, DELETE, Media Upload
- Each operation is logged and validated
Best Practices
- Always check schema first with
strapi_get_content_types
- Use proper plural/singular forms for endpoints
- Include error handling in your queries
- Validate URLs before upload
- Start with minimal queries and add population only when needed
- Always include the complete data object when updating
- Use filters to optimize query performance
- Leverage built-in schema validation
- Check version compatibility for your operations
- Follow the write protection policy guidelines
REST API Tips
Filtering
// Filter by field value
params: {
filters: {
title: "Exact Match"
}
}
// Contains filter
params: {
filters: {
title: {
$contains: "partial"
}
}
}
// Multiple conditions
params: {
filters: {
$and: [{ category: "news" }, { published: true }]
}
}
Sorting
params: {
sort: ["createdAt:desc"]
}
Pagination
params: {
pagination: {
page: 1,
pageSize: 25
}
}
Population
// Basic request without population
params: {}
// Selective population when needed
params: {
populate: ["category"]
}
// Detailed population with field selection
params: {
populate: {
category: {
fields: ["name", "slug"]
}
}
}
Troubleshooting
Common Issues and Solutions
-
404 Errors
- Check endpoint plural/singular form
- Verify content type exists
- Ensure correct API URL
- Check ID format (numeric vs document-based)
-
Authentication Issues
- Verify JWT token validity and permissions
- Ensure token hasn't expired
-
Version-Related Issues
- Check version specification in config
- Confirm data structure matches version
- Review version differences documentation
-
Write Protection Errors
- Ensure operation is authorized
- Confirm operation is not protected against your request
- Verify request adheres to security policy
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT