Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

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.

−6 this week 63 Trust /100
Trust breakdown (6 categories)

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
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
Install

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

# add to Claude Code
claude mcp add paulrichez-devkit-for-strapi-mcp -- npx -y devkit-for-strapi-mcp
# add to Codex CLI
codex mcp add paulrichez-devkit-for-strapi-mcp -- npx -y devkit-for-strapi-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "paulrichez-devkit-for-strapi-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "devkit-for-strapi-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add paulrichez-devkit-for-strapi-mcp --command npx --arg -y --arg devkit-for-strapi-mcp
# ~/.hermes/config.yaml
mcp_servers:
  paulrichez-devkit-for-strapi-mcp:
    command: "npx"
    args: ["-y", "devkit-for-strapi-mcp"]
// mcp.json
{
  "mcpServers": {
    "paulrichez-devkit-for-strapi-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "devkit-for-strapi-mcp"
      ]
    }
  }
}
Changelog

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
Diagnostics

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.

MCP tools — 30 exposed · ~4,357 tokens

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.

Tool Tokens
add_project ~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`).

NameTypeReqDescription
pathstringyesAbsolute path to the Strapi project root, or to any file/folder inside it.

No output schema declared.

No examples provided.

apply_edits ~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.

NameTypeReqDescription
planobjectA full, well-formed plan object (planId + fingerprints), if not using planId.
planIdstringThe planId from a plan_* result (preferred).

No output schema declared.

No examples provided.

apply_rename ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
methodstringPass to rename a method; omit to rename the entity.
newNamestringyes
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyes

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
fieldstringyesThe relation attribute name, e.g. author
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
newTargetstringyesThe new target content-type UID, e.g. api::user.user
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
uidstringyesThe content-type UID, e.g. api::article.article

No output schema declared.

No examples provided.

coverage ~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 ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
namestringyesPlugin name, kebab-case, e.g. billing.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.

No output schema declared.

No examples provided.

dependencies ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyes
transitivebooleanFollow dependencies recursively (default false).

No output schema declared.

No examples provided.

dependents ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyes
transitivebooleanFollow dependents recursively (default false).

No output schema declared.

No examples provided.

extract_to_plugin ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
namestringyesNew plugin name, kebab-case.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refsarrayyesArtifact refs to extract together.

No output schema declared.

No examples provided.

find_references ~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.

NameTypeReqDescription
compactbooleanCompact one-line-per-hit output (default true). false → full objects.
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
limitintegerMax references returned per ref (default 50).
offsetintegerSkip this many references (pagination).
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstring
refsarraySeveral refs to query in one call (batch).

No output schema declared.

No examples provided.

find_relation_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).

NameTypeReqDescription
fieldstringA relation field name; omit for all relations.
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
uidstringyesA content-type UID, e.g. api::article.article

No output schema declared.

No examples provided.

get_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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
uidstringA content-type or component UID.
uidsarraySeveral UIDs to fetch in one call.

No output schema declared.

No examples provided.

list_artifacts ~100

List the real refs of a project's services, controllers, policies and middlewares (optionally one kind). Use the exact refs returned.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
kindstring
projectstringA 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 ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA 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 ~85

List the real component UIDs (e.g. shared.seo) of a Strapi project.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA 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 ~99

List the real content-type UIDs (e.g. api::article.article) of a Strapi project. Use these exact UIDs — do not invent them.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA 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 ~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 ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
patternstringyesGlob, e.g. plugin::billing.* or api::*
projectstringA 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 ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA 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 ~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.

NameTypeReqDescription
filestringRestrict to one file; omit for the whole app.
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
kindsarrayRestrict to certain kinds (default: all).
projectstringA 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 ~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.

NameTypeReqDescription
fieldstringyesThe relation attribute name, e.g. author
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
newTargetstringyesThe new target content-type UID, e.g. api::user.user
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
uidstringyesThe content-type UID, e.g. api::article.article

No output schema declared.

No examples provided.

plan_move ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyesAn artifact ref (plugin::src.helper) or a content-type UID (api::x.x)
toNamespacestringyesDestination namespace: plugin::dst or api::foo

No output schema declared.

No examples provided.

plan_move_entities ~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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refsarrayyesThe artifact/content-type refs to move together.
toNamespacestringyesDestination namespace for all of them: plugin::dst or api::foo

No output schema declared.

No examples provided.

plan_rename_attribute ~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`.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
newNamestringyesNew attribute name.
oldNamestringyesCurrent attribute name.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
uidstringyesThe content-type UID.

No output schema declared.

No examples provided.

plan_rename_entity ~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`).

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
newNamestringyes
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyesThe entity UID/ref, e.g. api::product.product or shared.seo

No output schema declared.

No examples provided.

plan_rename_method ~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`).

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
methodstringyesThe current method name, e.g. notify
newNamestringyes
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyesThe owning service/controller ref, e.g. api::page.notifier

No output schema declared.

No examples provided.

refresh ~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 ~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`.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
newNamestringyesNew attribute name.
oldNamestringyesCurrent attribute name.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
uidstringyesThe content-type UID.

No output schema declared.

No examples provided.

resolve ~100

Resolve a Strapi reference (UID / service / controller / policy / middleware / route handler) to its defining file(s), tagged by kind.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyes

No output schema declared.

No examples provided.

validate_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.

NameTypeReqDescription
fromstringA path inside the target project (e.g. the file you are editing). Disambiguates a multi-project workspace.
projectstringA project name (its folder) or root path. Use when you have no file path in hand.
refstringyes

No output schema declared.

No examples provided.