Skip to main content
Glama

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.6.0 - Enhanced Validation & Debugging Update

  • ๐Ÿ”ง Implemented structured error handling with McpError and ErrorCode

  • โœ… Added comprehensive Zod validation for runtime type safety

  • ๐Ÿ“Š Integrated comprehensive logging system with request tracking

  • ๐Ÿ› Added debug mode configuration with environment variables

  • ๐Ÿงน Removed unused prompt handlers for cleaner codebase

  • โฌ†๏ธ Updated all dependencies to latest versions

  • ๐Ÿ“– Added DEBUGGING.md guide for development workflow

  • ๐Ÿ›ก๏ธ Enhanced security with better input validation

  • ๐Ÿš€ Improved developer experience with detailed error messages

For complete version history, see CHANGELOG.md.

Related MCP server: Directus MCP Server

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

You can use this server directly with npx in your Claude Desktop configuration:

{
  "mcpServers": {
    "strapi": {
      "command": "npx",
      "args": ["-y", "@bschauer/strapi-mcp-server@2.6.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

The server now supports various version formats:

  • Wildcard: "5.", "4."

  • Specific: "4.1.5", "5.0.0"

  • Simple: "v4", "v5"

This helps the server provide version-specific guidance and handle API differences appropriately.

Getting a JWT Token

  1. Log in to your Strapi admin panel

  2. Create an API token with appropriate permissions

  3. Add the token to your config file under the appropriate server name

Usage

List Available Servers

strapi_list_servers();
// Now 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

The REST API provides 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 between Strapi versions that the server handles 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

The server implements a strict write protection policy:

  • All write operations require explicit authorization

  • Protected operations include:

    • POST (Create)

    • PUT (Update)

    • DELETE

    • Media Upload

  • Each operation is logged and validated

Best Practices

  1. Always check schema first with strapi_get_content_types

  2. Use proper plural/singular forms for endpoints

  3. Include error handling in your queries

  4. Validate URLs before upload

  5. Start with minimal queries and add population only when needed

  6. Always include the complete data object when updating

  7. Use filters to optimize query performance

  8. Leverage built-in schema validation

  9. Check version compatibility for your operations

  10. 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:

  1. 404 Errors

    • Check endpoint plural/singular form

    • Verify content type exists

    • Ensure correct API URL

    • Check if using correct ID format (numeric vs document-based)

  2. Authentication Issues

    • Verify JWT token is valid

    • Check token permissions

    • Ensure token hasn't expired

  3. Version-Related Issues

    • Verify version specification in config

    • Check data structure matches version

    • Review version differences documentation

  4. Write Protection Errors

    • Ensure operation is authorized

    • Check if operation is protected

    • Verify request follows security policy

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT

Available Tools

5 tools
strapi_get_componentsA

Get all components from Strapi with pagination support. Returns both component data and pagination metadata (page, pageSize, total, pageCount).

Inputs: server (required), page, pageSize.

strapi_get_content_typesB

Get all content types from Strapi. Returns the complete schema of all content types.

Initialization Steps (ALWAYS DO FIRST)

  1. Get schema and analyze with this tool

  2. Capture Content Types and structures

  3. Remember endpoint names (pluralName/singularName)

  4. Document fields and types

  5. Identify relations

  6. Consider required fields and validations

Schema Conventions

  • singularName: Used for single item queries (e.g., "article")

  • pluralName: Used for collection endpoints (e.g., "articles")

  • collectionName: Database collection name

Endpoint Patterns

  • Collection: GET /api/{pluralName}

  • Single: GET /api/{pluralName}/{id}

  • Create: POST /api/{pluralName}

  • Update: PUT /api/{pluralName}/{id}

  • Delete: DELETE /api/{pluralName}/{id}

Inputs: server (required).

strapi_list_serversC

List all available Strapi servers from the configuration.

Security Policy

STRICT_USER_AUTHORIZATION_REQUIRED: No write operations without explicit user authorization. Protected operations: POST (Create), PUT (Update), DELETE (Delete), Media Upload. All write operations require userAuthorized: true parameter.

Strapi Version Support

Supports both Strapi v4 and v5 with automatic version detection.

Version Differences

  • v4: Numeric IDs, nested attributes under 'attributes', data wrapper in responses

  • v5: Document-based IDs (documentId), flat structure, direct attribute access

Common Errors

  • 404: Using numeric ID instead of documentId, wrong plural/singular form

  • 405: Incorrect endpoint (/article instead of /articles)

  • 400: Missing data wrapper in request body

Best Practices

  1. Always check schema first with strapi_get_content_types

  2. Use documentId (not numeric id) for Strapi v5

  3. Always use data wrapper for updates: { data: { field: value } }

  4. Use pluralName for collection endpoints (api/articles)

  5. Validate URLs with webtools before using them

Inputs: no named parameters.

strapi_restA

Execute REST API requests against Strapi endpoints. IMPORTANT: All write operations (POST, PUT, DELETE) require explicit user authorization via the userAuthorized parameter.

Reading Data

params: { populate: ['SEO'] } // Populate a component params: { populate: { SEO: { fields: ['Title', 'seoDescription'] } } } // With field selection params: { filters: { title: { $contains: 'search' } } } // Filter results params: { sort: ['createdAt:desc'] } // Sort results params: { pagination: { page: 1, pageSize: 10 } } // Pagination

Writing Data (REQUIRES userAuthorized: true)

body: { data: { componentName: { Title: 'value' }, // Single component componentName: [{ field: 'value' }] // Repeatable component } }

Debugging Guide

  • 404 Error: Check plural/singular form, use documentId not numeric id

  • 400 Error: Check if data wrapper is present in body

  • 405 Error: Check endpoint format (/articles not /article)

  • URL Errors: Validate URLs with webtools first

  • ID Problems: Use documentId for Strapi v5

Strapi v5 Specifics

  • Use documentId instead of numeric id

  • Direct attribute access (no nested attributes)

  • No data wrapper in GET responses

Inputs: server (required), endpoint (required), body, method, +2 more.

strapi_upload_mediaA

Upload media to Strapi's media library from a URL with format conversion, quality control, and metadata options. IMPORTANT: This is a write operation that REQUIRES explicit user authorization via the userAuthorized parameter.

Upload Steps

  1. Upload via strapi_upload_media with URL and metadata

  2. Get image ID from response

  3. Link to content using strapi_rest PUT request

Linking Images to Content (Strapi v5)

After upload, use PUT request to link: { "method": "PUT", "endpoint": "api/articles/{documentId}", "body": { "data": { "images": ["imageId"] } }, "userAuthorized": true }

Inputs: url (required), server (required), format, quality, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    A3.7/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool targets a distinct function: schema introspection (components vs content types), server listing, generic REST execution, and media upload. No overlap in purposes.

    Naming Consistency4/5

    Tools follow a strapi_verb_noun pattern mostly (get_components, get_content_types, list_servers, upload_media), but 'strapi_rest' deviates by using an acronym instead of a verb. Overall consistent.

    Tool Count5/5

    5 tools is well-scoped for a Strapi MCP server, covering schema discovery, generic API access, media upload, and server management without superfluous tools.

    Completeness4/5

    The tool set provides schema introspection and a generic REST tool for all CRUD operations, plus media upload. Minor gap: no dedicated tool for content entry listing, but the REST tool covers it with schema guidance.

    Maintenance

    ActivityStale
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    Appeared in Searches