io.github.PaulRichez/devkit-for-strapi-mcp
NPM · DEVKIT-FOR-STRAPI-MCP · SCANNED AUG 3
Accurate Strapi project facts (UIDs, schemas, references) for AI agents — no more guessed UIDs.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency6
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT AND LicenseRef-PolyForm-Shield-1.0.0) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 15 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability69
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4357 tokens (~145/item across 30 items; 30 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
- Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage97
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 90% of tool parameters carry a description.Partial
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · devkit-for-strapi-mcp
claude mcp add paulrichez-devkit-for-strapi-mcp -- npx -y devkit-for-strapi-mcp
codex mcp add paulrichez-devkit-for-strapi-mcp -- npx -y devkit-for-strapi-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"paulrichez-devkit-for-strapi-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"devkit-for-strapi-mcp"
],
"enabled": true
}
}
} openclaw mcp add paulrichez-devkit-for-strapi-mcp --command npx --arg -y --arg devkit-for-strapi-mcp
mcp_servers:
paulrichez-devkit-for-strapi-mcp:
command: "npx"
args: ["-y", "devkit-for-strapi-mcp"] {
"mcpServers": {
"paulrichez-devkit-for-strapi-mcp": {
"command": "npx",
"args": [
"-y",
"devkit-for-strapi-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +18
- Malware scan: unverified → pass ▲ security
- Stability: unverified → 0.20 ▲ functional
- 31 Jul 26 −24
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Jul 26 +32
- Tool coverage: unverified → 100 ▲ functional
- First check of Schema quality: fail functional
- First check of Schema quality: fail functional
- First check of Tool coverage: 90 functional
- First check of Schema quality: excellent functional
- 26 Jul 26 37
First indexed and scored.
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Analysed npm/[email protected]
Provenance none
Ecosystem: npm · Outcome: none
Dependencies 0 packages
0 packages in the resolved dependency tree.
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
add_project Register a Strapi project by path ~114
Locate and index a Strapi project on demand from an ABSOLUTE path — either the project root, or any file/folder inside it (the server walks up to the project root; a folder is also scanned downward for monorepos). Use this when a tool returns `noProject`. Idempotent. Returns the projects now known (use a name/root with `from`/`project`).
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Absolute path to the Strapi project root, or to any file/folder inside it. |
No output schema declared.
No examples provided.
apply_edits Apply a reviewed plan to disk (contractual) ~135
Apply a plan returned by plan_rename_* (and future move/extract plans). Pass `planId` to apply exactly the reviewed plan, or `plan` (a full plan object) to apply one you hold. The plan is verified against disk first — if any touched file changed since it was computed, nothing is written (the changed paths are returned). ⚠️ Modifies files on disk.
| Name | Type | Req | Description |
|---|---|---|---|
| plan | object | — | A full, well-formed plan object (planId + fingerprints), if not using planId. |
| planId | string | — | The planId from a plan_* result (preferred). |
No output schema declared.
No examples provided.
apply_rename Rename a Strapi entity or method (writes files) ~168
Convenience: plan + apply a rename in one call. An entity (omit `method`) or a service/controller method (pass `method`). Rewrites every call-site + route handler and renames the files/folders. ⚠️ Modifies files on disk. Prefer plan_rename_* then apply_edits when you want to review first.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| method | string | — | Pass to rename a method; omit to rename the entity. |
| newName | string | yes | — |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | — |
No output schema declared.
No examples provided.
change_relation [deprecated → plan_change_relation] ~207
Deprecated alias of plan_change_relation. Change the `target` of a content-type's relation field to another content-type, editing schema.json precisely. Dry-run: returns a plan (+ `planId`), writes nothing; apply with `apply_edits`. Refused if the field isn't a relation or the new target is unknown (external plugin → warning); a bidirectional relation warns about its now-orphaned inverse field.
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | yes | The relation attribute name, e.g. author |
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| newTarget | string | yes | The new target content-type UID, e.g. api::user.user |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| uid | string | yes | The content-type UID, e.g. api::article.article |
No output schema declared.
No examples provided.
coverage List indexed call forms ~63
List the Strapi call forms the engine indexes (with a `via` tag + example) and the notable ones it does NOT index yet (`indexed: false`). Use this to know whether find_references/list_unused can be trusted for a given pattern, instead of assuming completeness.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
create_plugin Scaffold a new local plugin (dry-run) ~159
Plan the files for a new local Strapi plugin (`src/plugins/<name>/package.json` + `strapi-server.js`, and `config/plugins` if missing). Dry-run (+ `planId`, + `warnings` to verify the server entry for your Strapi version); apply with `apply_edits`. Use extract_to_plugin to scaffold AND move artifacts in one plan.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| name | string | yes | Plugin name, kebab-case, e.g. billing. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
dependencies What a ref uses (outgoing edges) ~128
List the refs that `ref` depends on — relations in its schema, services/controllers it calls, etc. Pass `transitive: true` to follow the chain. Half of the cut-analysis for modularization.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | — |
| transitive | boolean | — | Follow dependencies recursively (default false). |
No output schema declared.
No examples provided.
dependents What uses a ref (incoming edges) ~137
List the refs that depend on `ref` — what would break if it moved or changed. Pass `transitive: true` to follow the chain. The other half of cut-analysis: which edges become cross-namespace if you extract a set.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | — |
| transitive | boolean | — | Follow dependents recursively (default false). |
No output schema declared.
No examples provided.
extract_to_plugin Extract artifacts into a new plugin (dry-run) ~166
Scaffold a new local plugin AND move a set of services/controllers/policies/middlewares into it, in ONE plan: plugin files created, every call-site rewritten, files relocated. Dry-run (+ `planId`, + `warnings`); apply with `apply_edits`. Refused all-or-nothing if scaffold or move is unsafe. The one-pass extraction primitive.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| name | string | yes | New plugin name, kebab-case. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| refs | array | yes | Artifact refs to extract together. |
No output schema declared.
No examples provided.
find_references Find references to a Strapi entity ~215
List every call-site that references a UID / service / controller / handler (or `ref#method`) across the project. Returns the total first, then a page of references. Compact by default (`path:line:col [via] snippet`, 1-based) — pass `compact: false` for full objects. Pass `refs` to query several at once.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | — | Compact one-line-per-hit output (default true). false → full objects. |
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| limit | integer | — | Max references returned per ref (default 50). |
| offset | integer | — | Skip this many references (pagination). |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | — | — |
| refs | array | — | Several refs to query in one call (batch). |
No output schema declared.
No examples provided.
find_relation_usages Find relation-field usages ~168
Find where a content-type's relation fields are used by name in queries (populate/filters). Pass `field` for one relation, omit it for all. Indispensable before retargeting or removing a relation. Only real relation fields are matched (top-level populate/filters; nested populate trees not yet — see coverage).
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | — | A relation field name; omit for all relations. |
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| uid | string | yes | A content-type UID, e.g. api::article.article |
No output schema declared.
No examples provided.
get_schema Get a content-type / component schema ~131
Return the real attributes (fields, relations, components) of a content-type or component UID. Use this instead of guessing field names. Pass `uids` to fetch several at once.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| uid | string | — | A content-type or component UID. |
| uids | array | — | Several UIDs to fetch in one call. |
No output schema declared.
No examples provided.
list_artifacts List services/controllers/policies/middlewares ~100
List the real refs of a project's services, controllers, policies and middlewares (optionally one kind). Use the exact refs returned.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| kind | string | — | — |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
list_broken_refs Find references that point at nothing ~118
List magic strings that resolve to no real entity — the inverse of list_unused, and the safety net after a move/rename (target: 0). Skips unverifiable external-plugin refs. Use after apply_edits to confirm nothing was left dangling.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
list_components List components ~85
List the real component UIDs (e.g. shared.seo) of a Strapi project.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
list_content_types List content-types ~99
List the real content-type UIDs (e.g. api::article.article) of a Strapi project. Use these exact UIDs — do not invent them.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
list_projects List Strapi projects ~35
List the Strapi projects discovered in the workspace (name, root, version, counts). Call this first in a multi-project workspace.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_refs List refs by glob ~137
List entity refs matching a glob — e.g. `plugin::billing.*` for a plugin's whole surface, `api::*` for all APIs, `*` for everything. Only `*` is special. Each result carries the kinds it resolves to.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| pattern | string | yes | Glob, e.g. plugin::billing.* or api::* |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
list_routes List HTTP routes ~116
List a project's HTTP route table (method, path, handler, policies, middlewares) — explicit routes plus the auto-CRUD routes synthesized from createCoreRouter. Statically parsed (no Strapi boot); framework/plugin-injected routes are not included.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
list_unused Find unused Strapi entities/methods ~180
List definitions with 0 Strapi references — service/controller methods never called via strapi.service()/route handlers, plus unused content-types, components, services, policies and middlewares. Static: counts Strapi refs only, so a method called **directly in TS** still appears — verify before deleting. Use `file` for one file (else the whole app), `kinds` to narrow.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | — | Restrict to one file; omit for the whole app. |
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| kinds | array | — | Restrict to certain kinds (default: all). |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
No output schema declared.
No examples provided.
plan_change_relation Plan retargeting a relation field (dry-run) ~201
Change the `target` of a content-type's relation field to another content-type, editing schema.json precisely. Dry-run: returns a plan (+ `planId`), writes nothing; apply with `apply_edits`. Refused if the field isn't a relation or the new target is unknown (external plugin → warning); a bidirectional relation warns about its now-orphaned inverse field.
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | yes | The relation attribute name, e.g. author |
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| newTarget | string | yes | The new target content-type UID, e.g. api::user.user |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| uid | string | yes | The content-type UID, e.g. api::article.article |
No output schema declared.
No examples provided.
plan_move Plan moving an artifact or content-type to another namespace (dry-run) ~231
Compute the edits to move to another namespace (e.g. plugin::dst): a service/controller/policy/middleware, OR a content-type (its whole resource — content-type + service + controller + routes move together, relation `target`s repointed). Rewrites every call-site (full-UID forms, `strapi.plugin(...)` chains, route handlers) and relocates the files. Dry-run: returns a plan (+ `planId`, + `warnings`, incl. plugin content-type registration to verify), writes nothing. Apply with `apply_edits`. Refused all-or-nothing if unsafe.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | An artifact ref (plugin::src.helper) or a content-type UID (api::x.x) |
| toNamespace | string | yes | Destination namespace: plugin::dst or api::foo |
No output schema declared.
No examples provided.
plan_move_entities Plan moving a set of artifacts/content-types to one namespace (dry-run) ~171
Like plan_move but for several refs at once (artifacts and/or content-types), to the same destination — one coherent plan so the cluster's internal refs stay consistent in a single pass. Dry-run (+ `planId`, + `warnings`); apply with `apply_edits`. Refused all-or-nothing on any unsafe spec.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| refs | array | yes | The artifact/content-type refs to move together. |
| toNamespace | string | yes | Destination namespace for all of them: plugin::dst or api::foo |
No output schema declared.
No examples provided.
plan_rename_attribute Plan a content-type attribute rename — schema + relation query-keys only (dry-run) ~198
Rename an attribute in schema.json, plus (for a RELATION) its populate/filters usages by name via the relation-field index. ⚠️ Does NOT rewrite object/data-access usages (`entity.field`, `data: { field }`, destructuring, populated results) — those are untyped property access we cannot rewrite without guessing; the result always warns to review them by hand. NOT a complete field rename. Dry-run (+ `planId`); apply with `apply_edits`.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| newName | string | yes | New attribute name. |
| oldName | string | yes | Current attribute name. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| uid | string | yes | The content-type UID. |
No output schema declared.
No examples provided.
plan_rename_entity Plan an entity rename (dry-run) ~171
Compute the exact edits to rename a content-type / service / controller / policy / middleware / component: every magic-string call-site and route handler, plus the file/folder renames. Dry-run: returns a plan (edits + `planId`), writes nothing. Review, then apply with `apply_edits` (pass the `planId`).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| newName | string | yes | — |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | The entity UID/ref, e.g. api::product.product or shared.seo |
No output schema declared.
No examples provided.
plan_rename_method Plan a service/controller method rename (dry-run) ~186
Compute the exact edits to rename a service/controller METHOD — its declaration, every `strapi.service(...).method()` call-site, and (for controllers) the action segment of route handlers. Dry-run: returns a plan (text edits + `planId`), writes nothing. Review, then apply with `apply_edits` (pass the `planId`).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| method | string | yes | The current method name, e.g. notify |
| newName | string | yes | — |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | The owning service/controller ref, e.g. api::page.notifier |
No output schema declared.
No examples provided.
refresh Re-index projects from disk (pick up external changes) ~119
Re-scan every discovered Strapi project from disk and rebuild the index. The server does not watch the filesystem: files created, edited, or deleted OUTSIDE this MCP session (a manual edit, another tool, git checkout/pull, a branch switch) are invisible to every other tool until this runs — call it before find_references/list_broken_refs/list_unused/coverage whenever files may have changed outside apply_edits/apply_rename, or those tools reason over a stale snapshot and can wrongly report 0 references. Cheap to call defensively.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
rename_attribute [deprecated → plan_rename_attribute] ~204
Deprecated alias of plan_rename_attribute. Rename an attribute in schema.json, plus (for a RELATION) its populate/filters usages by name via the relation-field index. ⚠️ Does NOT rewrite object/data-access usages (`entity.field`, `data: { field }`, destructuring, populated results) — those are untyped property access we cannot rewrite without guessing; the result always warns to review them by hand. NOT a complete field rename. Dry-run (+ `planId`); apply with `apply_edits`.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| newName | string | yes | New attribute name. |
| oldName | string | yes | Current attribute name. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| uid | string | yes | The content-type UID. |
No output schema declared.
No examples provided.
resolve Resolve a reference to its file(s) ~100
Resolve a Strapi reference (UID / service / controller / policy / middleware / route handler) to its defining file(s), tagged by kind.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | — |
No output schema declared.
No examples provided.
validate_reference Validate a Strapi reference ~115
Check whether a Strapi reference is real in the project. Returns valid | unknown (+ didYouMean) | external (a plugin not in the workspace — cannot be verified). Call this before writing a magic string.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | — | A path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace. |
| project | string | — | A project name (its folder) or root path. Use when you have no file path in hand. |
| ref | string | yes | — |
No output schema declared.
No examples provided.