strapi-mcp
Provides AI-powered content management for Strapi CMS, including tools for CRUD operations on content types, media management, publication lifecycle, internationalization, search, and bulk actions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@strapi-mcplist published articles"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Strapi MCP Server
AI-powered content management for Strapi CMS via Model Context Protocol.
Features
Connect any MCP-compatible AI assistant (Claude, Cursor, etc.) to your Strapi CMS. Manage content, media, locales, and more through natural language.
20 Tools across 8 categories
Category | Tools | Description |
Schema (3) |
| Discover and inspect content models |
Content (5) |
| Full CRUD for any content type |
Media (3) |
| Upload, browse, and manage media library |
Publish (3) |
| Control publication lifecycle |
i18n (2) |
| Internationalization support |
Search (2) |
| Full-text search and counting |
Bulk (1) |
| Batch create, update, or delete |
System (1) |
| Server info and version detection |
Additional MCP capabilities
3 Prompts:
manage_content,content_migration,setup_guide-- guided workflows for common tasks1 Resource:
strapi://help-- comprehensive usage guide with examples
Related MCP server: Strapi MCP Server
Quick Start
Install the server:
pip install strapi-mcpConfigure your Strapi connection:
export STRAPI_BASE_URL="http://localhost:1337" export STRAPI_API_TOKEN="your-strapi-api-token"Connect from your MCP client (see Client Configuration below).
Installation
Using pip
pip install strapi-mcpUsing uvx (no install required)
uvx strapi-mcpFrom source
git clone https://github.com/alexzimmermann/strapi-mcp.git
cd strapi-mcp
pip install -e .Configuration
All settings are configured via environment variables with the STRAPI_ prefix:
Variable | Default | Description |
|
| URL of your Strapi instance |
| (empty) | API token for authentication. Create in Strapi Admin > Settings > API Tokens. |
|
| Strapi version: |
|
| HTTP request timeout in seconds |
|
| Maximum entries per page (1-100) |
You can also place these in a .env file in your working directory.
Creating a Strapi API Token
Open your Strapi Admin panel (e.g.,
http://localhost:1337/admin)Navigate to Settings > API Tokens
Click Create new API Token
Set Token type to Full Access (or customize permissions)
Copy the generated token and set it as
STRAPI_API_TOKEN
Client Configuration
Claude Desktop
Add to your Claude Desktop config file (claude_desktop_config.json):
{
"mcpServers": {
"strapi": {
"command": "uvx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_BASE_URL": "http://localhost:1337",
"STRAPI_API_TOKEN": "your-strapi-api-token"
}
}
}
}Cursor
Add to your Cursor MCP config:
{
"mcpServers": {
"strapi": {
"command": "uvx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_BASE_URL": "http://localhost:1337",
"STRAPI_API_TOKEN": "your-strapi-api-token"
}
}
}
}Smithery
This server is available on Smithery. Install directly from the Smithery registry or configure manually using the smithery.yaml included in this repository.
Available Tools
Tool | Description |
| List all available content types in the Strapi instance |
| Get the full field schema for a specific content type |
| List all reusable components and their schemas |
| List entries with filtering, sorting, pagination, and population |
| Get a single entry by ID (or documentId in v5) |
| Create a new content entry with field data |
| Update an existing entry by ID |
| Delete an entry by ID |
| Upload a file to the media library (URL or base64) |
| Browse the media library with pagination |
| Delete a file from the media library |
| Publish a draft entry to make it publicly available |
| Revert a published entry to draft status |
| Discard unsaved draft changes (Strapi v5 only) |
| List all configured locales for i18n |
| Get an entry in a specific locale |
| Full-text search across entries of a content type |
| Count entries matching optional filter criteria |
| Perform bulk create, update, or delete operations |
| Get Strapi server info, version, and connection status |
Strapi Version Support
This server supports both Strapi v4 and Strapi v5 with automatic version detection.
Auto-detection
When STRAPI_API_VERSION is set to auto (the default), the server detects your Strapi version at startup by:
Fetching a content type entry and inspecting its response format
Checking the admin information endpoint for a version string
Defaulting to v5 if detection is inconclusive
Key differences handled automatically
Feature | Strapi v4 | Strapi v5 |
Entry format | Nested | Flat with |
Entry identifier | Numeric | String |
Publication status |
|
|
Draft discard | Not available |
|
You can force a specific version by setting STRAPI_API_VERSION=v4 or STRAPI_API_VERSION=v5.
Development
Setup
git clone https://github.com/alexzimmermann/strapi-mcp.git
cd strapi-mcp
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -e ".[dev]"Running tests
pytestRunning with coverage
pytest --cov=strapi_mcp --cov-report=term-missingCode style
ruff check .
ruff format .License
MIT License. See LICENSE for details.
Available Tools
20 toolsbulk_actionA
Execute a bulk operation (create, update, delete, publish, or unpublish) on multiple content entries. Processes each entry sequentially with per-entry error handling so individual failures do not abort the entire batch. Returns a detailed summary showing successes, failures, and error messages for each entry. Use this for batch imports, migrations, or mass status changes.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The bulk operation to perform. Must be one of: 'create', 'update', 'delete', 'publish', or 'unpublish'. Each action expects different entry data formats. | |
| entries | Yes | JSON array of entry objects. Format depends on the action: - create: [{"title": "A", ...}, {"title": "B", ...}] - update: [{"id": 1, "data": {"title": "Updated"}}, ...] - delete: [{"id": 1}, {"id": 2}, ...] or [1, 2, 3] - publish: [{"id": 1}, {"id": 2}, ...] or [1, 2, 3] - unpublish: [{"id": 1}, {"id": 2}, ...] or [1, 2, 3] | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds sequential processing, per-entry error handling to prevent batch aborts, and return summary details. These go beyond annotations (readOnlyHint, destructiveHint, openWorldHint) providing crucial behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first defines purpose, second adds behavioral details, third gives usage guidance. No redundancy, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers what the tool does and how it behaves. Missing potential constraints like batch size limits or idempotency, but output schema and high schema coverage compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameter semantics with detailed descriptions and format examples. Description does not add significant new information about parameters beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes bulk operations (create, update, delete, publish, unpublish) on multiple content entries, explicitly contrasting with single-entry sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends use for batch imports, migrations, or mass status changes. Lacks direct 'when not to use' but sibling tools provide enough context to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_entriesARead-only
Count the total number of entries in a content type, optionally filtered by criteria. Makes a lightweight API call that only requests pagination metadata to get the total count efficiently. Use this to understand dataset sizes before bulk operations or to verify migration completeness.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale code to count entries for a specific language (e.g., 'en', 'fr') | |
| status | No | Publication status filter: 'draft' or 'published' (v5 only) | |
| filters | No | JSON string of Strapi filters to count only matching entries (e.g., '{"category":{"$eq":"tech"}}', '{"price":{"$gt":50}}'). Omit for total count. | |
| content_type | Yes | Plural API ID of the content type to count (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds value by disclosing the lightweight API call that only requests pagination metadata for efficiency, aligning with annotations and providing extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: purpose, implementation detail, usage guidance. No unnecessary words, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description suffices by covering purpose, efficiency, and use cases. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds no new details about individual parameters beyond summarizing overall filtering capability. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Count', the resource 'entries in a content type', and the ability to filter. It distinguishes from siblings like 'list_entries' by emphasizing the count action and lightweight nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use: 'understand dataset sizes before bulk operations or to verify migration completeness'. It does not address when not to use, but the guidance is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_entryA
Create a new content entry in the specified Strapi content type. Accepts a JSON string with field values that match the content type schema. Use get_content_type_schema first to understand which fields are required and their expected types before calling this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | JSON string with the entry data. Must contain the fields defined in the content type schema. Example: '{"title": "My Article", "content": "Hello world", "slug": "my-article"}' | |
| locale | No | Locale for the entry if i18n is enabled (e.g., 'en', 'fr') | |
| status | No | Initial publication status: 'draft' or 'published' (v5 only) | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description adds context about accepting JSON string and referencing schema, but no additional behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with primary purpose, then necessary usage instruction. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: purpose, prerequisite, data format. With output schema present, no need to detail return values. Minor gap: does not mention that content_type must be plural API ID (though schema describes it).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and schema already documents all parameters. Description only adds that data is a JSON string, which is already implied by the parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new content entry' with a specific verb and resource ('Strapi content type'). It distinguishes from sibling tools like update_entry, delete_entry, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use get_content_type_schema first to understand required fields and types. Provides clear context for when to use the tool, though does not list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entryADestructive
Permanently delete a content entry by its ID from the specified content type. This action is irreversible and will remove the entry and its associated data. Use get_entry first to verify you are deleting the correct entry. If a locale is specified, only that localization is removed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale of the specific localization to delete (e.g., 'fr'). If omitted, deletes all localizations. | |
| entry_id | Yes | Numeric ID of the entry to permanently delete | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds 'This action is irreversible and will remove the entry and its associated data,' offering concrete context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete tool with optional locale, the description covers purpose, irreversibility, verification step, and locale behavior. Output schema exists, so return values are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds detail for the locale parameter: 'If a locale is specified, only that localization is removed,' which enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete a content entry by its ID from the specified content type.' It uses a specific verb and resource, and distinguishes from siblings like delete_media or discard_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises 'Use get_entry first to verify you are deleting the correct entry,' providing a clear precaution. It also explains locale behavior but does not explicitly mention when not to use or full alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mediaADestructive
Permanently delete a file from the Strapi media library by its ID. This removes the file from storage and breaks any references to it in content entries. Use list_media first to find the correct file ID before deleting. This action cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | Numeric ID of the media file to permanently delete from the library |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by explaining that deletion removes the file from storage and breaks references, and notes it cannot be undone. This complements the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loading the purpose and providing essential behavioral and usage information without extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter and annotations present, the description fully explains the action, consequences, and prerequisite, making it complete for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema's description of 'file_id' as a numeric ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Permanently delete') and the resource ('file from the Strapi media library by its ID'), distinguishing it from sibling tools like list_media and upload_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using list_media first to find the correct file ID, providing clear context for use. It does not explicitly state when not to use this tool or name alternatives beyond list_media.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_draftADestructive
Discard unsaved draft changes on a content entry, reverting to the last published version. This is only available on Strapi v5 which has a separate draft layer. On Strapi v4, this operation is not supported and will return an error. Use this when you want to abandon draft edits without affecting the currently published version.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale of the draft to discard (e.g., 'en', 'fr'). Only needed for i18n-enabled types. | |
| entry_id | Yes | Numeric ID of the entry whose draft changes should be discarded | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds value by explaining what gets destroyed (draft changes) and that the published version remains unaffected. It also reveals the Strapi v5 dependency. These additions justify a score above the baseline, but no further details on side effects or return behavior are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two sentences, with the first sentence clearly stating the action and effect, and the second adding constraints and usage guidance. Every sentence earns its place; no unnecessary words. Structurally front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior, version constraint, and usage scenario. An output schema exists, so return values need not be explained. However, it omits handling of edge cases (e.g., no draft to discard) and does not mention the locale parameter's context (only for i18n-enabled types), leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not provide additional semantics beyond what the schema already states for each parameter; it only frames the parameters indirectly (e.g., 'unsaved draft changes'). No extra value is added to parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'discard' and the resource 'unsaved draft changes on a content entry', with the effect 'reverting to the last published version'. It distinguishes from sibling tools by specifying Strapi v5 exclusivity and contrasting with updating or creating entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you want to abandon draft edits without affecting the currently published version', providing a clear use case. However, it does not explicitly name alternative tools (e.g., update_entry or publish_entry) for when-not scenarios, which prevents a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_componentsARead-only
List all reusable components defined in the Strapi instance. Components are shared field groups that can be embedded in multiple content types (e.g., SEO metadata, address blocks). Use this to understand available components before referencing them in content type schemas or entry data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is clear. The description does not add behavioral traits beyond the annotations, such as authentication needs or pagination, but it adds resource context. With annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states action and resource, second explains components, third gives usage advice. No wasted words, front-loaded with main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and has an output schema. The description fully explains the purpose, context, and usage, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so schema coverage is 100%. The description adds meaning by explaining what components are and how to use the result, which goes beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all reusable components, defines what components are (shared field groups), and gives examples (SEO metadata, address blocks). It distinguishes from siblings as no other tool lists components specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage advice: 'Use this to understand available components before referencing them in content type schemas or entry data.' It gives clear context but does not explicitly mention when not to use it or alternatives, though none exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_content_type_schemaARead-only
Retrieve the detailed field schema for a specific Strapi content type. Returns all field definitions including types, required status, and relations, formatted as a readable list. Use this before creating or updating entries to understand the expected data structure and required fields.
| Name | Required | Description | Default |
|---|---|---|---|
| content_type | Yes | The full UID of the content type (e.g., 'api::article.article') or the plural API ID (e.g., 'articles'). If a short name is provided, the tool will attempt to resolve it to a full UID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, non-destructive, and openWorld. The description adds context about the output: 'all field definitions including types, required status, and relations, formatted as a readable list', which is beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. First sentence states purpose, second provides usage guidance and output details. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter tool with complete annotations and output schema, the description fully covers what an agent needs: purpose, when to use, and output format. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes the content_type parameter's UID or API ID and resolution behavior. The description does not add additional semantic value beyond what is in the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Retrieve' and explicitly names the resource 'detailed field schema for a specific Strapi content type', clearly distinguishing it from sibling tools like list_content_types or get_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use this before creating or updating entries to understand the expected data structure and required fields.' While it doesn't mention when not to use or alternative tools, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entryARead-only
Retrieve a single content entry by its ID with full field and relation data. Returns the complete entry including all populated relations and metadata fields. Use this when you need the full details of a specific entry after finding it via list_entries or search_entries.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale code to retrieve a specific localization (e.g., 'en', 'fr') | |
| entry_id | Yes | Numeric ID of the entry to retrieve | |
| populate | No | Relations to populate. Use '*' for all, or specify fields like 'author,tags' | * |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is clear. The description adds that it returns 'complete entry including all populated relations and metadata fields', which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then return details, then usage guidance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and the description covering purpose, usage, and return value, the description is complete. It mentions populated relations and metadata, aligning with expected outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. The description does not add significant meaning beyond the schema; it only mentions 'full field and relation data' which pertains to output rather than parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve a single content entry by its ID with full field and relation data', specifying the verb and resource. It distinguishes from siblings like list_entries and search_entries by mentioning its use after finding a specific entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'Use this when you need the full details of a specific entry after finding it via list_entries or search_entries.' This provides clear context and differentiates from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_localized_entryARead-only
Retrieve a specific localized version of a content entry by its ID and locale code. Returns the full entry data in the requested language, including all populated relations. Use list_locales first to see available locale codes, then use this to fetch content in a specific language for comparison or translation workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | Locale code for the desired translation (e.g., 'en', 'fr', 'de', 'es') | |
| entry_id | Yes | Numeric ID of the entry to retrieve in the specified locale | |
| populate | No | Relations to populate. Use '*' for all, or specify fields like 'author,tags' | * |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds behavioral context by stating it returns 'full entry data in the requested language, including all populated relations,' which is helpful but not strictly required given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that are front-loaded and efficient: first sentence states the core purpose, second adds what is returned, third provides usage guidance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description explains the return behavior (full entry data with relations). It also references sibling tools (list_locales), making the context complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant new meaning to the parameters beyond what is in the schema; it only implies the use of 'entry_id' and 'locale'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a localized version of a content entry by ID and locale code. It uses a specific verb ('Retrieve') and identifies the resource ('localized version of a content entry'). This differentiates it from siblings like get_entry (which likely gets the default locale) and list_locales.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using list_locales first to get available locale codes, and suggests using this tool for comparison or translation workflows. This provides clear when-to-use guidance and distinguishes from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_strapi_infoARead-only
Retrieve comprehensive information about the connected Strapi instance including version, plugins, and content types. Performs multiple API calls to detect the Strapi version (v4 or v5), count available content types, list installed plugins, and check configured locales. Use this as the first tool call when connecting to a new Strapi instance to understand its configuration and capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing that it performs multiple internal API calls to detect version, count content types, list plugins, and check locales. This gives the agent insight into the tool's behavior, complementing the readOnlyHint and destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, each sentence adding distinct value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, the presence of an output schema, and annotations that clearly mark it as a safe read operation, the description is fully complete. It covers scope, behavior, and usage guidance comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so no parameter documentation is needed. The description adds meaning by stating what information is retrieved, which suffices given the schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves comprehensive information about a Strapi instance including version, plugins, content types, and locales. It explicitly says 'Use this as the first tool call when connecting to a new Strapi instance', distinguishing it from sibling tools that perform mutations or more specific queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides the agent to 'Use this as the first tool call when connecting to a new Strapi instance to understand its configuration and capabilities', providing clear context and recommended usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_content_typesARead-only
List all user-defined content types registered in the Strapi instance. Fetches content types from the Content-Type Builder API and filters to only include those in the 'api::' namespace (i.e., user-created types). Use this as a first step to discover what content is available before querying entries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint, destructiveHint) already declare safety. Description adds that it fetches from specific API and filters to user-created types, but does not disclose any additional behavioral traits beyond what annotations imply. Since annotations are present, description adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose. No wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema (not shown but present), description fully covers what the tool does, its filtering logic, and usage context. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description does not need to add parameter info. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists user-defined content types from the Content-Type Builder API filtered to 'api::' namespace. Verb 'list' matches action, resource 'content types' specific. Distinguishes from siblings like get_content_type_schema (schema for one type) and list_entries (entries of a type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using as 'first step to discover content before querying entries'. Provides clear context but does not mention when to use alternative sibling tools like get_content_type_schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entriesARead-only
List content entries from a Strapi content type with full pagination, sorting, and filtering support. Returns entries formatted as a readable markdown list with metadata and pagination info. Use this to browse and explore content, applying filters and sort orders as needed. Call list_content_types first if you are unsure which content types are available.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination, starting at 1 | |
| sort | No | Sort expression (e.g., 'title:asc', 'createdAt:desc', 'price:asc,title:desc') | |
| fields | No | Comma-separated list of fields to return (e.g., 'title,slug,price') | |
| locale | No | Locale code to filter entries (e.g., 'en', 'fr', 'de') | |
| status | No | Publication status filter: 'draft' or 'published' (v5 only) | |
| filters | No | JSON string of Strapi filters (e.g., '{"title":{"$contains":"hello"}}' or '{"price":{"$gt":10}}') | |
| populate | No | Relations to populate. Use '*' for all, or specify fields like 'author,category' | * |
| page_size | No | Number of entries per page (1-100, default 25) | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products', 'categories') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering safety. The description adds context about the output format ('readable markdown list with metadata and pagination info') and capabilities, which enhances transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only 4 sentences, with no redundant information. It front-loads the core purpose and efficiently conveys key usage guidance. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, output schema exists), the description covers the main use case and provides a prerequisite hint. However, it could briefly mention navigating pagination or the scope of results, but the output schema fills some gaps. Overall, it feels sufficiently complete for a read-only browsing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mentions 'full pagination, sorting, and filtering' which maps to parameters, but does not add new meaning beyond the schema details. No parameter-specific elaboration is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'content entries from a Strapi content type', with specific features (pagination, sorting, filtering). It also distinguishes from siblings by advising to call list_content_types first, and implies its use for browsing vs. other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use list_content_types first when unsure, and states 'Use this to browse and explore content'. However, it does not explicitly mention when not to use this tool, such as for single entry retrieval or complex search queries (compared to get_entry or search_entries).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_localesARead-only
List all locales configured in the Strapi i18n plugin with their codes and display names. Returns each locale's code, display name, and whether it is the default locale. Use this to discover available languages before creating or querying localized content entries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior. The description adds value by specifying the returned fields (code, display name, default flag) and confirms it lists all locales.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the core action, followed by return details and usage advice—no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, no-parameter tool with an output schema, the description adequately covers purpose, return fields, and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the description correctly omits parameter details, meeting the baseline for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool lists all locales with codes and display names, clearly distinguishing it from other list tools like list_content_types and list_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using it to discover available languages before creating or querying localized entries, providing clear when-to-use context even though alternatives are not explicitly mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mediaARead-only
List files in the Strapi media library with pagination support. Returns file details including name, URL, type, dimensions, and metadata for each media asset. Use this to browse available files before linking them to content entries or to find files for deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination, starting at 1 | |
| page_size | No | Number of media files per page (1-100, default 25) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's addition of return fields and pagination adds some value but is not extensive. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded main action and context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With good annotations and schema, the description adequately covers purpose and usage. Lacks details on return structure, but output schema exists (not shown) so not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description only mentions 'pagination support', adding no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists files in the Strapi media library with pagination support, and distinguishes from sibling tools like delete_media and upload_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: browsing files before linking or deletion. However, it does not mention when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_entryA
Publish a draft content entry to make it publicly visible via the Strapi API. On Strapi v5, uses the dedicated publish action endpoint; on v4, sets the publishedAt timestamp. Use list_entries with status='draft' to find unpublished entries that need publishing.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale of the entry to publish (e.g., 'en', 'fr'). Only needed for i18n-enabled types. | |
| entry_id | Yes | Numeric ID of the entry to publish | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds critical behavioral details: version-specific implementation differences (v5 vs v4) and the consequence of making the entry 'publicly visible.' This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, then version-specific details, then a usage tip. No filler words; every sentence contributes new information. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has version-specific behavior and an output schema, the description covers the essentials: purpose, version behavior, and how to find eligible entries. It does not repeat output schema details, and no obvious gaps remain for a confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema descriptions are already clear. The description only adds the context that locale is needed for i18n-enabled types, which is already in the schema description. Thus, minimal added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Publish a draft content entry to make it publicly visible.' It distinguishes from siblings like unpublish_entry (reverse) and discard_draft (discard without publishing) by explicitly mentioning the draft-to-public transition and version-specific behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides actionable guidance: 'Use list_entries with status='draft' to find unpublished entries that need publishing.' This helps the agent understand the prerequisite step. It implies when to use (for draft entries) and when not (for non-drafts), but does not explicitly exclude other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entriesARead-only
Search for content entries matching a text query within a specific content type. Uses case-insensitive containment filters ($containsi) on string fields to find matching entries. Specify search_fields to narrow the search to specific fields, or leave it empty to search common text fields like title, name, and description.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination, starting at 1 | |
| query | Yes | Search text to look for across the content type fields (e.g., 'machine learning', 'summer sale') | |
| page_size | No | Number of results per page (1-100, default 25) | |
| content_type | Yes | Plural API ID of the content type to search (e.g., 'articles', 'products') | |
| search_fields | No | Comma-separated list of field names to search in (e.g., 'title,description'). If omitted, searches all string/text fields using $containsi filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds specific behavioral details: uses $containsi filter, case-insensitive, default fields if search_fields omitted. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. Front-loaded with purpose, followed by mechanism and optional parameter guidance. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations (readOnlyHint, openWorldHint, destructiveHint) and the presence of an output schema, the description provides enough context to use the tool correctly. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the search mechanism ($containsi) and the fallback behavior of search_fields. This justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for content entries by text query within a specific content type, using case-insensitive containment filters. It distinguishes from siblings like list_entries by adding search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (searching by query) and how to use search_fields or leave it empty for common fields. It does not explicitly mention when not to use it or compare to list_entries, but the guidance on parameters is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_entryA
Unpublish a live content entry, reverting it to draft status so it is no longer publicly visible. On Strapi v5, uses the dedicated unpublish action endpoint; on v4, sets publishedAt to null. The entry data is preserved and can be re-published later with publish_entry.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale of the entry to unpublish (e.g., 'en', 'fr'). Only needed for i18n-enabled types. | |
| entry_id | Yes | Numeric ID of the entry to unpublish | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: it specifies data preservation, version-specific behavior (v4 vs v5), and that the entry can be republished. No contradictions with annotations (readOnlyHint=false, destructiveHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first covers purpose and effect, second adds version-specific detail. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers main behavior, data preservation, and version differences. It has output schema, so return values are covered. Could mention permissions or prerequisites, but not essential for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter schema coverage is 100%, so the schema already describes parameters adequately. The tool description does not add significant new meaning for locale, entry_id, or content_type beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (unpublish), resource (live content entry), and outcome (reverts to draft, no longer publicly visible). It also distinguishes from the sibling 'publish_entry' by noting that the entry can be republished later.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to unpublish a live entry while preserving data) and contrasts with publish_entry. However, it does not provide explicit 'when-not' guidance or list alternatives like delete_entry or discard_draft.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_entryA
Update an existing content entry by its ID with partial or full field data. Only the fields included in the data JSON will be modified; other fields remain unchanged. Use get_entry first to see the current values, then provide only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | JSON string with the fields to update. Only include fields you want to change. Example: '{"title": "Updated Title", "price": 29.99}' | |
| locale | No | Locale of the entry to update if i18n is enabled (e.g., 'en', 'fr') | |
| entry_id | Yes | Numeric ID of the entry to update | |
| content_type | Yes | Plural API ID of the content type (e.g., 'articles', 'products') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the partial update behavior ('Only the fields included in the data JSON will be modified'), which adds context beyond the annotations. It does not cover failure modes or authorization, but annotations already provide safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: core purpose, behavioral detail, and usage advice. No redundancy or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (partial update), the description adequately explains behavior and prerequisites. An output schema exists, so return values are covered. No gaps for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the partial update pattern for the 'data' parameter and suggesting a workflow, going beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update an existing content entry by its ID') and specifies the method ('with partial or full field data'), effectively distinguishing it from sibling tools like create_entry or delete_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using get_entry first to see current values and provides a clear pattern for partial updates. However, it does not explicitly mention when not to use this tool or compare with alternatives like bulk_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_mediaA
Upload a file to the Strapi media library from a URL or base64-encoded data. Supports images, documents, videos, and any file type allowed by Strapi. Provide either a public file_url or base64 content along with a descriptive file name. The uploaded file can then be linked to content entries via relation fields.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Caption or description for the media file. | |
| alt_text | No | Alternative text for accessibility. Recommended for all images. | |
| file_url | No | Public URL of the file to download and upload to Strapi (e.g., 'https://example.com/image.jpg'). Either file_url or file_base64 must be provided. | |
| file_name | No | File name including extension (e.g., 'photo.jpg', 'document.pdf'). Used for storage and display. | upload |
| file_base64 | No | Base64-encoded file content to upload. Use this when you have the file data directly rather than a URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. Description adds file type support and linking behavior but omits details like overwrite policy or size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four well-structured sentences, front-loaded with action, no redundancy, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input sources, file types, and linking purpose. Output schema exists so return format is handled. Adequate for a file upload tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. Description reinforces mutual exclusivity but adds no new param meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (upload), resource (Strapi media library), and input methods (URL or base64). Distinguishes from siblings like delete_media and list_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to provide either file_url or file_base64 with file_name. Implies mutual exclusivity. Lacks explicit 'when not to use' but adequate given siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v0.1.0- First observed
bulk_action - First observed
count_entries - First observed
create_entry - First observed
delete_entry - First observed
delete_media - First observed
discard_draft - First observed
get_components - First observed
get_content_type_schema - First observed
get_entry - First observed
get_localized_entry - First observed
get_strapi_info - First observed
list_content_types - First observed
list_entries - First observed
list_locales - First observed
list_media - First observed
publish_entry - First observed
search_entries - First observed
unpublish_entry - First observed
update_entry - First observed
upload_media
TDQS
Scored across 20 tools
Every tool targets a distinct aspect of Strapi CMS: content entries, media, locales, schemas, bulk operations, etc. No two tools have overlapping purposes; even similar ones like get_entry and get_localized_entry are clearly differentiated by locale.
All tool names follow a consistent verb_noun pattern using lowercase snake_case (e.g., create_entry, delete_media, list_content_types). This predictability makes it easy for an agent to infer functionality from names.
With 20 tools, the server covers the full spectrum of Strapi operations—CRUD, media management, localization, schema inspection, bulk actions—without being overly numerous or sparse. Each tool serves a clear purpose.
The tool surface is comprehensive: full lifecycle for entries (create, read, update, delete, publish, unpublish, draft discard), media (upload, list, delete), locale support, schema discovery, and even bulk operations. No obvious gaps for typical CMS workflows.
Maintenance
Related MCP Connectors
Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.
- PressoOAuthnow.presso
Connect e-commerce and marketing data to AI assistants via MCP.
Let AI agents query data and act across all your business apps via MCP.
Connect MCP clients to 2,000+ AI models without managing provider API keys.
Related MCP Servers
- AlicenseAqualityBmaintenanceA Model Context Protocol server that enables AI assistants to interact with Strapi CMS instances through a standardized interface, supporting content types and REST API operations.5235 npm75MIT
- AlicenseNot gradedqualityDmaintenanceProvides access to Strapi CMS content through the MCP protocol, allowing users to create, read, update, and delete content entries via Claude.1,425 npm25MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Strapi CMS instances through REST API operations. Supports content management, media uploads, schema introspection, and multiple server configurations with JWT authentication.9 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact directly with Strapi v5 CMS content through full CRUD operations, media uploads, and content type exploration using Strapi's Document Service API.286 npm1MIT