drupal-mcp-connector 2.7.3 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/commands/drupal-audit-config-best-practices.md +15 -0
- package/{.claude → .agents}/commands/drupal-audit-site-health.md +4 -5
- package/.agents/commands/drupal-block-user.md +19 -0
- package/{.claude → .agents}/commands/drupal-bulk-create.md +4 -5
- package/{.claude → .agents}/commands/drupal-bulk-update.md +4 -5
- package/.agents/commands/drupal-config-get.md +18 -0
- package/.agents/commands/drupal-config-list.md +16 -0
- package/.agents/commands/drupal-config-set.md +19 -0
- package/.agents/commands/drupal-content-by-moderation-state.md +21 -0
- package/.agents/commands/drupal-create-block.md +20 -0
- package/{.claude → .agents}/commands/drupal-create-media.md +4 -5
- package/{.claude → .agents}/commands/drupal-create-menu-link.md +4 -5
- package/{.claude → .agents}/commands/drupal-create-node.md +7 -8
- package/{.claude → .agents}/commands/drupal-create-paragraph.md +4 -5
- package/{.claude → .agents}/commands/drupal-create-redirect.md +4 -5
- package/.agents/commands/drupal-create-taxonomy-term.md +22 -0
- package/{.claude → .agents}/commands/drupal-create-translation.md +4 -5
- package/.agents/commands/drupal-create-user.md +23 -0
- package/.agents/commands/drupal-delete-media.md +21 -0
- package/.agents/commands/drupal-delete-node.md +22 -0
- package/.agents/commands/drupal-delete-taxonomy-term.md +21 -0
- package/{.claude → .agents}/commands/drupal-describe-fields.md +4 -5
- package/.agents/commands/drupal-drush-cache-rebuild.md +15 -0
- package/.agents/commands/drupal-drush-config-export.md +15 -0
- package/.agents/commands/drupal-drush-config-import.md +15 -0
- package/.agents/commands/drupal-drush-config-status.md +15 -0
- package/.agents/commands/drupal-drush-cron.md +15 -0
- package/.agents/commands/drupal-drush-module-disable.md +20 -0
- package/.agents/commands/drupal-drush-module-enable.md +18 -0
- package/.agents/commands/drupal-drush-module-list.md +16 -0
- package/.agents/commands/drupal-drush-security-updates.md +15 -0
- package/{.claude → .agents}/commands/drupal-drush-sql-query.md +4 -5
- package/.agents/commands/drupal-drush-status.md +15 -0
- package/.agents/commands/drupal-drush-updatedb.md +15 -0
- package/.agents/commands/drupal-drush-user-create.md +21 -0
- package/.agents/commands/drupal-drush-user-list.md +18 -0
- package/.agents/commands/drupal-drush-watchdog.md +18 -0
- package/{.claude → .agents}/commands/drupal-entity-create.md +4 -5
- package/.agents/commands/drupal-entity-delete.md +23 -0
- package/.agents/commands/drupal-entity-get.md +21 -0
- package/{.claude → .agents}/commands/drupal-entity-list.md +4 -5
- package/{.claude → .agents}/commands/drupal-entity-update.md +7 -8
- package/.agents/commands/drupal-find-orphaned-media.md +17 -0
- package/.agents/commands/drupal-get-entity-schema.md +19 -0
- package/.agents/commands/drupal-get-media.md +19 -0
- package/.agents/commands/drupal-get-node.md +19 -0
- package/{.claude → .agents}/commands/drupal-get-paragraph.md +4 -5
- package/{.claude → .agents}/commands/drupal-get-revision.md +4 -5
- package/.agents/commands/drupal-get-taxonomy-term.md +19 -0
- package/.agents/commands/drupal-get-taxonomy-terms.md +20 -0
- package/.agents/commands/drupal-get-user-by-name.md +18 -0
- package/.agents/commands/drupal-get-user.md +18 -0
- package/{.claude → .agents}/commands/drupal-governance-status.md +4 -5
- package/.agents/commands/drupal-graphql-introspect.md +16 -0
- package/{.claude → .agents}/commands/drupal-graphql.md +4 -5
- package/{.claude → .agents}/commands/drupal-list-blocks.md +4 -5
- package/.agents/commands/drupal-list-content-types.md +15 -0
- package/.agents/commands/drupal-list-entity-types.md +15 -0
- package/.agents/commands/drupal-list-media-types.md +15 -0
- package/.agents/commands/drupal-list-media.md +20 -0
- package/{.claude → .agents}/commands/drupal-list-menu-links.md +4 -5
- package/.agents/commands/drupal-list-moderation-states.md +19 -0
- package/{.claude → .agents}/commands/drupal-list-nodes.md +4 -5
- package/{.claude → .agents}/commands/drupal-list-revisions.md +4 -5
- package/.agents/commands/drupal-list-roles.md +15 -0
- package/{.claude → .agents}/commands/drupal-list-sites.md +2 -3
- package/{.claude → .agents}/commands/drupal-list-translations.md +4 -5
- package/.agents/commands/drupal-list-users.md +19 -0
- package/.agents/commands/drupal-list-vocabularies.md +15 -0
- package/.agents/commands/drupal-mcp-whoami.md +15 -0
- package/.agents/commands/drupal-report-404-log.md +16 -0
- package/.agents/commands/drupal-report-accessibility-audit.md +17 -0
- package/.agents/commands/drupal-report-alias-coverage.md +17 -0
- package/.agents/commands/drupal-report-broken-embeds.md +17 -0
- package/{.claude → .agents}/commands/drupal-report-broken-links.md +4 -5
- package/.agents/commands/drupal-report-cache-config.md +15 -0
- package/.agents/commands/drupal-report-config-drift.md +15 -0
- package/.agents/commands/drupal-report-content-by-author.md +17 -0
- package/.agents/commands/drupal-report-content-summary.md +15 -0
- package/.agents/commands/drupal-report-duplicate-content.md +17 -0
- package/.agents/commands/drupal-report-field-completeness.md +20 -0
- package/.agents/commands/drupal-report-menu-integrity.md +16 -0
- package/{.claude → .agents}/commands/drupal-report-missing-field.md +4 -5
- package/.agents/commands/drupal-report-module-audit.md +15 -0
- package/.agents/commands/drupal-report-orphan-pages.md +17 -0
- package/{.claude → .agents}/commands/drupal-report-orphaned-references.md +4 -5
- package/.agents/commands/drupal-report-permission-audit.md +15 -0
- package/.agents/commands/drupal-report-pii-exposure.md +18 -0
- package/.agents/commands/drupal-report-readability.md +18 -0
- package/.agents/commands/drupal-report-recently-published.md +17 -0
- package/.agents/commands/drupal-report-redirect-health.md +16 -0
- package/.agents/commands/drupal-report-revision-hotspots.md +17 -0
- package/.agents/commands/drupal-report-scheduled-content.md +17 -0
- package/{.claude → .agents}/commands/drupal-report-seo-audit.md +4 -5
- package/.agents/commands/drupal-report-seo-meta-coverage.md +18 -0
- package/.agents/commands/drupal-report-stale-content.md +19 -0
- package/.agents/commands/drupal-report-status-report.md +16 -0
- package/.agents/commands/drupal-report-taxonomy-usage.md +21 -0
- package/.agents/commands/drupal-report-text-format-audit.md +15 -0
- package/.agents/commands/drupal-report-translation-coverage.md +18 -0
- package/.agents/commands/drupal-report-unpublished.md +17 -0
- package/.agents/commands/drupal-report-user-activity.md +17 -0
- package/.agents/commands/drupal-report-workflow-bottlenecks.md +19 -0
- package/{.claude → .agents}/commands/drupal-resolve-reference.md +4 -5
- package/{.claude → .agents}/commands/drupal-revert-revision.md +4 -5
- package/{.claude → .agents}/commands/drupal-schedule-publish.md +4 -5
- package/.agents/commands/drupal-search-content.md +21 -0
- package/.agents/commands/drupal-search.md +20 -0
- package/.agents/commands/drupal-security-info.md +15 -0
- package/.agents/commands/drupal-set-moderation-state.md +20 -0
- package/.agents/commands/drupal-site-info.md +15 -0
- package/.agents/commands/drupal-update-media.md +22 -0
- package/{.claude → .agents}/commands/drupal-update-menu-link.md +4 -5
- package/{.claude → .agents}/commands/drupal-update-node.md +10 -11
- package/{.claude → .agents}/commands/drupal-update-paragraph.md +4 -5
- package/{.claude → .agents}/commands/drupal-update-redirect.md +4 -5
- package/.agents/commands/drupal-update-taxonomy-term.md +22 -0
- package/.agents/commands/drupal-update-user.md +24 -0
- package/{.claude → .agents}/commands/drupal-upload-file-and-create-media.md +4 -5
- package/{.claude → .agents}/commands/drupal-upload-file.md +4 -5
- package/CHANGELOG.md +80 -0
- package/README.md +23 -12
- package/config/config.example.json +1 -1
- package/package.json +4 -2
- package/scripts/generate-commands.js +42 -21
- package/scripts/install-commands.js +157 -0
- package/src/lib/backends/backend-interface.js +20 -1
- package/src/lib/backends/jsonapi.js +47 -4
- package/src/lib/body-summary.js +60 -0
- package/src/lib/data-flow.js +437 -0
- package/src/lib/dispatch.js +99 -30
- package/src/lib/drupal-fetch.js +52 -6
- package/src/lib/field-definition.js +285 -0
- package/src/lib/operations.js +39 -2
- package/src/lib/patch-preflight.js +157 -66
- package/src/lib/security.js +15 -1
- package/src/lib/server-tools.js +9 -0
- package/src/lib/site-target.js +78 -0
- package/src/lib/tool-prompts.js +2 -1
- package/src/lib/write-revision.js +82 -2
- package/src/tools/bulk.js +4 -3
- package/src/tools/config.js +5 -2
- package/src/tools/entities.js +11 -7
- package/src/tools/index.js +24 -3
- package/src/tools/moderation.js +88 -9
- package/src/tools/nodes.js +55 -43
- package/.claude/commands/drupal-audit-config-best-practices.md +0 -16
- package/.claude/commands/drupal-block-user.md +0 -20
- package/.claude/commands/drupal-config-get.md +0 -19
- package/.claude/commands/drupal-config-list.md +0 -17
- package/.claude/commands/drupal-config-set.md +0 -20
- package/.claude/commands/drupal-content-by-moderation-state.md +0 -22
- package/.claude/commands/drupal-create-block.md +0 -21
- package/.claude/commands/drupal-create-taxonomy-term.md +0 -23
- package/.claude/commands/drupal-create-user.md +0 -24
- package/.claude/commands/drupal-delete-media.md +0 -22
- package/.claude/commands/drupal-delete-node.md +0 -23
- package/.claude/commands/drupal-delete-taxonomy-term.md +0 -22
- package/.claude/commands/drupal-drush-cache-rebuild.md +0 -16
- package/.claude/commands/drupal-drush-config-export.md +0 -16
- package/.claude/commands/drupal-drush-config-import.md +0 -16
- package/.claude/commands/drupal-drush-config-status.md +0 -16
- package/.claude/commands/drupal-drush-cron.md +0 -16
- package/.claude/commands/drupal-drush-module-disable.md +0 -21
- package/.claude/commands/drupal-drush-module-enable.md +0 -19
- package/.claude/commands/drupal-drush-module-list.md +0 -17
- package/.claude/commands/drupal-drush-security-updates.md +0 -16
- package/.claude/commands/drupal-drush-status.md +0 -16
- package/.claude/commands/drupal-drush-updatedb.md +0 -16
- package/.claude/commands/drupal-drush-user-create.md +0 -22
- package/.claude/commands/drupal-drush-user-list.md +0 -19
- package/.claude/commands/drupal-drush-watchdog.md +0 -19
- package/.claude/commands/drupal-entity-delete.md +0 -24
- package/.claude/commands/drupal-entity-get.md +0 -22
- package/.claude/commands/drupal-find-orphaned-media.md +0 -18
- package/.claude/commands/drupal-get-entity-schema.md +0 -20
- package/.claude/commands/drupal-get-media.md +0 -20
- package/.claude/commands/drupal-get-node.md +0 -20
- package/.claude/commands/drupal-get-taxonomy-term.md +0 -20
- package/.claude/commands/drupal-get-taxonomy-terms.md +0 -21
- package/.claude/commands/drupal-get-user-by-name.md +0 -19
- package/.claude/commands/drupal-get-user.md +0 -19
- package/.claude/commands/drupal-graphql-introspect.md +0 -17
- package/.claude/commands/drupal-list-content-types.md +0 -16
- package/.claude/commands/drupal-list-entity-types.md +0 -16
- package/.claude/commands/drupal-list-media-types.md +0 -16
- package/.claude/commands/drupal-list-media.md +0 -21
- package/.claude/commands/drupal-list-moderation-states.md +0 -20
- package/.claude/commands/drupal-list-roles.md +0 -16
- package/.claude/commands/drupal-list-users.md +0 -20
- package/.claude/commands/drupal-list-vocabularies.md +0 -16
- package/.claude/commands/drupal-mcp-whoami.md +0 -16
- package/.claude/commands/drupal-report-404-log.md +0 -17
- package/.claude/commands/drupal-report-accessibility-audit.md +0 -18
- package/.claude/commands/drupal-report-alias-coverage.md +0 -18
- package/.claude/commands/drupal-report-broken-embeds.md +0 -18
- package/.claude/commands/drupal-report-cache-config.md +0 -16
- package/.claude/commands/drupal-report-config-drift.md +0 -16
- package/.claude/commands/drupal-report-content-by-author.md +0 -18
- package/.claude/commands/drupal-report-content-summary.md +0 -16
- package/.claude/commands/drupal-report-duplicate-content.md +0 -18
- package/.claude/commands/drupal-report-field-completeness.md +0 -21
- package/.claude/commands/drupal-report-menu-integrity.md +0 -17
- package/.claude/commands/drupal-report-module-audit.md +0 -16
- package/.claude/commands/drupal-report-orphan-pages.md +0 -18
- package/.claude/commands/drupal-report-permission-audit.md +0 -16
- package/.claude/commands/drupal-report-pii-exposure.md +0 -19
- package/.claude/commands/drupal-report-readability.md +0 -19
- package/.claude/commands/drupal-report-recently-published.md +0 -18
- package/.claude/commands/drupal-report-redirect-health.md +0 -17
- package/.claude/commands/drupal-report-revision-hotspots.md +0 -18
- package/.claude/commands/drupal-report-scheduled-content.md +0 -18
- package/.claude/commands/drupal-report-seo-meta-coverage.md +0 -19
- package/.claude/commands/drupal-report-stale-content.md +0 -20
- package/.claude/commands/drupal-report-status-report.md +0 -17
- package/.claude/commands/drupal-report-taxonomy-usage.md +0 -22
- package/.claude/commands/drupal-report-text-format-audit.md +0 -16
- package/.claude/commands/drupal-report-translation-coverage.md +0 -19
- package/.claude/commands/drupal-report-unpublished.md +0 -18
- package/.claude/commands/drupal-report-user-activity.md +0 -18
- package/.claude/commands/drupal-report-workflow-bottlenecks.md +0 -20
- package/.claude/commands/drupal-search-content.md +0 -22
- package/.claude/commands/drupal-search.md +0 -21
- package/.claude/commands/drupal-security-info.md +0 -16
- package/.claude/commands/drupal-set-moderation-state.md +0 -21
- package/.claude/commands/drupal-site-info.md +0 -16
- package/.claude/commands/drupal-update-media.md +0 -23
- package/.claude/commands/drupal-update-taxonomy-term.md +0 -23
- package/.claude/commands/drupal-update-user.md +0 -25
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audit custom menu links (menu_link_content): disabled links, links with no usable target (route:<nojs>/empty placeholders), and external links. Structural; deep target-existence checks are not performed (JSON:API can't probe a target by internal id)."
|
|
3
|
+
argument-hint: "[site] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_menu_integrity`.
|
|
7
|
+
|
|
8
|
+
Audit custom menu links (menu_link_content): disabled links, links with no usable target (route:<nojs>/empty placeholders), and external links. Structural; deep target-existence checks are not performed (JSON:API can't probe a target by internal id).
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `limit` (number): Max menu links to scan
|
|
15
|
+
|
|
16
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Find entities of a content type where a given field is empty (e.g. a missing meta description, image, or summary). Works for scalar fields and entity-reference fields. Sampling-bounded — flags 'approximate' when the scan is capped."
|
|
3
3
|
argument-hint: "<field> [site] [type] [sampleSize]"
|
|
4
|
-
allowed-tools: mcp__drupal__drupal_report_missing_field
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
Call the
|
|
6
|
+
Call the MCP tool `drupal_report_missing_field`.
|
|
8
7
|
|
|
9
8
|
Find entities of a content type where a given field is empty (e.g. a missing meta description, image, or summary). Works for scalar fields and entity-reference fields. Sampling-bounded — flags 'approximate' when the scan is capped.
|
|
10
9
|
|
|
11
|
-
Parse the
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
12
11
|
|
|
13
12
|
**Required:**
|
|
14
13
|
- `field` (string): Field machine name to check for emptiness, e.g. 'field_meta_description', 'field_image'
|
|
15
14
|
|
|
16
15
|
**Optional:**
|
|
17
|
-
- `site` (string):
|
|
16
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
18
17
|
- `type` (string): Content type machine name (default: article)
|
|
19
18
|
- `sampleSize` (number): Max entities to scan
|
|
20
19
|
|
|
21
|
-
If a required parameter is missing
|
|
20
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audit enabled modules: development/debug modules that should be off in production, plus modules with known security advisories. Self-sufficient via the connector's drush bridge (drush pm:list + pm:security)."
|
|
3
|
+
argument-hint: "[site]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_module_audit`.
|
|
7
|
+
|
|
8
|
+
Audit enabled modules: development/debug modules that should be off in production, plus modules with known security advisories. Self-sufficient via the connector's drush bridge (drush pm:list + pm:security).
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
|
|
15
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Find published pages with no inbound internal links from other sampled pages — content islands. Best-effort over the sampled set."
|
|
3
|
+
argument-hint: "[site] [type] [sampleSize]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_orphan_pages`.
|
|
7
|
+
|
|
8
|
+
Find published pages with no inbound internal links from other sampled pages — content islands. Best-effort over the sampled set.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `sampleSize` (number)
|
|
16
|
+
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Find entities whose entity-reference fields point at targets that no longer exist (orphaned references). Best-effort: samples entities and probes each distinct referenced target via JSON:API. A 404 (or unaddressable ref) is an orphan; 401/403 and connector policy denials are counted as unverifiable, not missing. uid/revision_uid are skipped when the policy denies user. Flags 'approximate' when sampling-bounded."
|
|
3
3
|
argument-hint: "[site] [type] [sampleSize]"
|
|
4
|
-
allowed-tools: mcp__drupal__drupal_report_orphaned_references
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
Call the
|
|
6
|
+
Call the MCP tool `drupal_report_orphaned_references`.
|
|
8
7
|
|
|
9
8
|
Find entities whose entity-reference fields point at targets that no longer exist (orphaned references). Best-effort: samples entities and probes each distinct referenced target via JSON:API. A 404 (or unaddressable ref) is an orphan; 401/403 and connector policy denials are counted as unverifiable, not missing. uid/revision_uid are skipped when the policy denies user. Flags 'approximate' when sampling-bounded.
|
|
10
9
|
|
|
11
|
-
Parse the
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
12
11
|
|
|
13
12
|
**Optional:**
|
|
14
|
-
- `site` (string):
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
15
14
|
- `type` (string): Content type machine name to scan (default: article)
|
|
16
15
|
- `sampleSize` (number): Max entities to scan for broken references
|
|
17
16
|
|
|
18
|
-
If a required parameter is missing
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audit role permissions: dangerous grants to the anonymous/authenticated roles and administrative permissions held by non-admin roles. Self-sufficient via the connector's drush bridge (drush role:list)."
|
|
3
|
+
argument-hint: "[site]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_permission_audit`.
|
|
7
|
+
|
|
8
|
+
Audit role permissions: dangerous grants to the anonymous/authenticated roles and administrative permissions held by non-admin roles. Self-sufficient via the connector's drush bridge (drush role:list).
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
|
|
15
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Scan published body content for accidentally exposed PII (emails, US SSNs, phone numbers). Matched values are masked in the output so the report itself doesn't leak data."
|
|
3
|
+
argument-hint: "[site] [type] [sampleSize] [kinds]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_pii_exposure`.
|
|
7
|
+
|
|
8
|
+
Scan published body content for accidentally exposed PII (emails, US SSNs, phone numbers). Matched values are masked in the output so the report itself doesn't leak data.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `sampleSize` (number)
|
|
16
|
+
- `kinds` (array (pass as JSON)): PII kinds to scan (default: all)
|
|
17
|
+
|
|
18
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Score body readability (Flesch Reading Ease) for a content type and flag hard-to-read content and structural issues (no H2 subheadings, multiple H1s)."
|
|
3
|
+
argument-hint: "[site] [type] [sampleSize] [hardThreshold]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_readability`.
|
|
7
|
+
|
|
8
|
+
Score body readability (Flesch Reading Ease) for a content type and flag hard-to-read content and structural issues (no H2 subheadings, multiple H1s).
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `sampleSize` (number)
|
|
16
|
+
- `hardThreshold` (number): Flag content scoring below this
|
|
17
|
+
|
|
18
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "List the most recently published content of a given type."
|
|
3
|
+
argument-hint: "[site] [type] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_recently_published`.
|
|
7
|
+
|
|
8
|
+
List the most recently published content of a given type.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `limit` (number)
|
|
16
|
+
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audit the Redirect module table for structural problems: duplicate sources, self-redirects, and redirect chains/loops. Deterministic from the redirect entity list; gated when the 'redirect' resource isn't exposed."
|
|
3
|
+
argument-hint: "[site] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_redirect_health`.
|
|
7
|
+
|
|
8
|
+
Audit the Redirect module table for structural problems: duplicate sources, self-redirects, and redirect chains/loops. Deterministic from the redirect entity list; gated when the 'redirect' resource isn't exposed.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `limit` (number): Max redirects to scan
|
|
15
|
+
|
|
16
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Find nodes with the most revision activity — useful for spotting churn or content that needs editorial process review. Requires Drupal 9.3+ JSON:API revisions."
|
|
3
|
+
argument-hint: "[site] [type] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_revision_hotspots`.
|
|
7
|
+
|
|
8
|
+
Find nodes with the most revision activity — useful for spotting churn or content that needs editorial process review. Requires Drupal 9.3+ JSON:API revisions.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `limit` (number)
|
|
16
|
+
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Report content with Scheduler publish/unpublish dates set, split into pending (future) and overdue (past, action not run). Gated when scheduler fields aren't exposed."
|
|
3
|
+
argument-hint: "[site] [type] [sampleSize]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_scheduled_content`.
|
|
7
|
+
|
|
8
|
+
Report content with Scheduler publish/unpublish dates set, split into pending (future) and overdue (past, action not run). Gated when scheduler fields aren't exposed.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `sampleSize` (number)
|
|
16
|
+
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "SEO audit for a content type: missing meta descriptions, title length issues, and thin content (under 300 words). Returns node lists for each issue category. Meta descriptions use the rendered Metatag output via GraphQL when available (reported as `metaSource`); when no description source is readable it reports the meta check as unavailable rather than a false zero."
|
|
3
3
|
argument-hint: "[site] [type] [sampleSize]"
|
|
4
|
-
allowed-tools: mcp__drupal__drupal_report_seo_audit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
Call the
|
|
6
|
+
Call the MCP tool `drupal_report_seo_audit`.
|
|
8
7
|
|
|
9
8
|
SEO audit for a content type: missing meta descriptions, title length issues, and thin content (under 300 words). Returns node lists for each issue category. Meta descriptions use the rendered Metatag output via GraphQL when available (reported as `metaSource`); when no description source is readable it reports the meta check as unavailable rather than a false zero.
|
|
10
9
|
|
|
11
|
-
Parse the
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
12
11
|
|
|
13
12
|
**Optional:**
|
|
14
|
-
- `site` (string):
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
15
14
|
- `type` (string): Content type (default: article)
|
|
16
15
|
- `sampleSize` (number)
|
|
17
16
|
|
|
18
|
-
If a required parameter is missing
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Report structured-meta (SEO) coverage for a content type: how many sampled nodes populate each meta field (metatag, meta description). Complements drupal_report_seo_audit with explicit per-field coverage."
|
|
3
|
+
argument-hint: "[site] [type] [fields] [sampleSize]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_seo_meta_coverage`.
|
|
7
|
+
|
|
8
|
+
Report structured-meta (SEO) coverage for a content type: how many sampled nodes populate each meta field (metatag, meta description). Complements drupal_report_seo_audit with explicit per-field coverage.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `fields` (array (pass as JSON)): Meta field machine names to check
|
|
16
|
+
- `sampleSize` (number)
|
|
17
|
+
|
|
18
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Find content that hasn't been updated in N days. Returns a sorted list with titles, status, and days-since-update."
|
|
3
|
+
argument-hint: "[site] [type] [days] [status] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_stale_content`.
|
|
7
|
+
|
|
8
|
+
Find content that hasn't been updated in N days. Returns a sorted list with titles, status, and days-since-update.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `days` (number): Stale threshold in days
|
|
16
|
+
- `status` (boolean (true/false)): Filter by publish status
|
|
17
|
+
- `limit` (number)
|
|
18
|
+
|
|
19
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Surface the Drupal status report (system requirements) entries at warning/error severity — pending updates, overdue cron, missing dependencies, writable settings. Self-sufficient via the connector's drush bridge (drush core:requirements)."
|
|
3
|
+
argument-hint: "[site] [minSeverity]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_status_report`.
|
|
7
|
+
|
|
8
|
+
Surface the Drupal status report (system requirements) entries at warning/error severity — pending updates, overdue cron, missing dependencies, writable settings. Self-sufficient via the connector's drush bridge (drush core:requirements).
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `minSeverity` (string): Lowest severity to include
|
|
15
|
+
|
|
16
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Count how many nodes use each term in a vocabulary. Identifies over-used, under-used, and orphaned terms."
|
|
3
|
+
argument-hint: "<vocabulary> [site] [contentType] [referenceField] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_taxonomy_usage`.
|
|
7
|
+
|
|
8
|
+
Count how many nodes use each term in a vocabulary. Identifies over-used, under-used, and orphaned terms.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Required:**
|
|
13
|
+
- `vocabulary` (string): Vocabulary machine name, e.g. 'tags', 'category'
|
|
14
|
+
|
|
15
|
+
**Optional:**
|
|
16
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
17
|
+
- `contentType` (string): Content type to count references from (default: article)
|
|
18
|
+
- `referenceField` (string): Field referencing the vocabulary (default: field_{vocabulary})
|
|
19
|
+
- `limit` (number)
|
|
20
|
+
|
|
21
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audit text formats for ones that permit unfiltered HTML (filter_html not enabled), which are dangerous if exposed to untrusted roles. Reads filter.format.* via the connector's drush bridge (or the governed config server-tool when configured); requires config-read access."
|
|
3
|
+
argument-hint: "[site]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_text_format_audit`.
|
|
7
|
+
|
|
8
|
+
Audit text formats for ones that permit unfiltered HTML (filter_html not enabled), which are dangerous if exposed to untrusted roles. Reads filter.format.* via the connector's drush bridge (or the governed config server-tool when configured); requires config-read access.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
|
|
15
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Report content distribution by language for a content type and flag languages lagging the most-populated language — a multilingual coverage signal."
|
|
3
|
+
argument-hint: "[site] [type] [gapThreshold] [sampleSize]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_translation_coverage`.
|
|
7
|
+
|
|
8
|
+
Report content distribution by language for a content type and flag languages lagging the most-populated language — a multilingual coverage signal.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `gapThreshold` (number): Flag languages below this fraction of the top language
|
|
16
|
+
- `sampleSize` (number)
|
|
17
|
+
|
|
18
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "List unpublished/draft content of a given type. Returns a finding list with titles, last-changed dates, and paths. Useful for surfacing forgotten drafts."
|
|
3
|
+
argument-hint: "[site] [type] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_unpublished`.
|
|
7
|
+
|
|
8
|
+
List unpublished/draft content of a given type. Returns a finding list with titles, last-changed dates, and paths. Useful for surfacing forgotten drafts.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type machine name (default: article)
|
|
15
|
+
- `limit` (number): Max unpublished nodes to return
|
|
16
|
+
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "User activity summary: active vs blocked accounts, never-logged-in users, and users inactive beyond a threshold. Useful for security audits and account hygiene."
|
|
3
|
+
argument-hint: "[site] [inactiveDays] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_user_activity`.
|
|
7
|
+
|
|
8
|
+
User activity summary: active vs blocked accounts, never-logged-in users, and users inactive beyond a threshold. Useful for security audits and account hygiene.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `inactiveDays` (number): Days without login to flag as inactive
|
|
15
|
+
- `limit` (number)
|
|
16
|
+
|
|
17
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Find content stuck in a non-published moderation state (draft/needs_review) beyond N days — editorial bottlenecks. Reads moderation_state; gated when content_moderation isn't exposed."
|
|
3
|
+
argument-hint: "[site] [type] [days] [states] [sampleSize]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_report_workflow_bottlenecks`.
|
|
7
|
+
|
|
8
|
+
Find content stuck in a non-published moderation state (draft/needs_review) beyond N days — editorial bottlenecks. Reads moderation_state; gated when content_moderation isn't exposed.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
- `type` (string): Content type (default: article)
|
|
15
|
+
- `days` (number): Days-in-state threshold
|
|
16
|
+
- `states` (array (pass as JSON)): Moderation states to treat as bottlenecks
|
|
17
|
+
- `sampleSize` (number)
|
|
18
|
+
|
|
19
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Resolve a human name or title to a Drupal entity UUID. Use this before creating or updating an entity reference when you only know the label (e.g. a taxonomy term name, a user name, or a node title) and not its UUID. Read-only: returns the best match { id, title } plus any ambiguous candidates. Filters on 'title' for nodes and 'name' for taxonomy_term / user."
|
|
3
3
|
argument-hint: "<entityType> <bundle> <name> [site] [limit]"
|
|
4
|
-
allowed-tools: mcp__drupal__drupal_resolve_reference
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
Call the
|
|
6
|
+
Call the MCP tool `drupal_resolve_reference`.
|
|
8
7
|
|
|
9
8
|
Resolve a human name or title to a Drupal entity UUID. Use this before creating or updating an entity reference when you only know the label (e.g. a taxonomy term name, a user name, or a node title) and not its UUID. Read-only: returns the best match { id, title } plus any ambiguous candidates. Filters on 'title' for nodes and 'name' for taxonomy_term / user.
|
|
10
9
|
|
|
11
|
-
Parse the
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
12
11
|
|
|
13
12
|
**Required:**
|
|
14
13
|
- `entityType` (string): Entity type machine name, e.g. 'node', 'taxonomy_term', 'user'
|
|
@@ -16,7 +15,7 @@ Parse the request in `$ARGUMENTS` into this tool's parameters:
|
|
|
16
15
|
- `name` (string): Human name/title to resolve (matched as a substring)
|
|
17
16
|
|
|
18
17
|
**Optional:**
|
|
19
|
-
- `site` (string): Named site (
|
|
18
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
20
19
|
- `limit` (number): Maximum candidates to consider
|
|
21
20
|
|
|
22
|
-
If a required parameter is missing
|
|
21
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Revert a content node to a prior revision (GOVERNED WRITE). Reads the target revision and replays its editable content as a NEW current revision (history is preserved, nothing is deleted). Internal ids, revision metadata, and computed paths are not written back. Subject to the site's write security policy. Confirm with the user before calling."
|
|
3
3
|
argument-hint: "<type> <id> <version> [site]"
|
|
4
|
-
allowed-tools: mcp__drupal__drupal_revert_revision
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
Call the
|
|
6
|
+
Call the MCP tool `drupal_revert_revision`.
|
|
8
7
|
|
|
9
8
|
Revert a content node to a prior revision (GOVERNED WRITE). Reads the target revision and replays its editable content as a NEW current revision (history is preserved, nothing is deleted). Internal ids, revision metadata, and computed paths are not written back. Subject to the site's write security policy. Confirm with the user before calling.
|
|
10
9
|
|
|
11
|
-
Parse the
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
12
11
|
|
|
13
12
|
**Required:**
|
|
14
13
|
- `type` (string): Content type machine name
|
|
@@ -16,6 +15,6 @@ Parse the request in `$ARGUMENTS` into this tool's parameters:
|
|
|
16
15
|
- `version` (string): Revision to restore: numeric vid, 'id:<vid>', 'rel:latest-version', or 'rel:working-copy'.
|
|
17
16
|
|
|
18
17
|
**Optional:**
|
|
19
|
-
- `site` (string):
|
|
18
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
20
19
|
|
|
21
|
-
If a required parameter is missing
|
|
20
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Schedule a content node to publish and/or unpublish at a future time using the Drupal Scheduler module. Sets the publish_on and unpublish_on fields on the node. Requires the Scheduler module to be installed and enabled for the content type, with the publish_on / unpublish_on fields present on the bundle — otherwise the call fails with a clear capability error. Timestamps accept ISO 8601 (e.g. '2026-07-01T12:00:00Z') or a Unix epoch and are passed through unchanged. Provide at least one of publishOn or unpublishOn."
|
|
3
3
|
argument-hint: "<type> <id> [site] [publishOn] [unpublishOn]"
|
|
4
|
-
allowed-tools: mcp__drupal__drupal_schedule_publish
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
Call the
|
|
6
|
+
Call the MCP tool `drupal_schedule_publish`.
|
|
8
7
|
|
|
9
8
|
Schedule a content node to publish and/or unpublish at a future time using the Drupal Scheduler module. Sets the publish_on and unpublish_on fields on the node. Requires the Scheduler module to be installed and enabled for the content type, with the publish_on / unpublish_on fields present on the bundle — otherwise the call fails with a clear capability error. Timestamps accept ISO 8601 (e.g. '2026-07-01T12:00:00Z') or a Unix epoch and are passed through unchanged. Provide at least one of publishOn or unpublishOn.
|
|
10
9
|
|
|
11
|
-
Parse the
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
12
11
|
|
|
13
12
|
**Required:**
|
|
14
13
|
- `type` (string): Content type machine name, e.g. 'article'
|
|
15
14
|
- `id` (string): Node UUID
|
|
16
15
|
|
|
17
16
|
**Optional:**
|
|
18
|
-
- `site` (string): Named site (
|
|
17
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
19
18
|
- `publishOn` (string): When to publish — ISO 8601 datetime or Unix epoch. Sets the Scheduler publish_on field.
|
|
20
19
|
- `unpublishOn` (string): When to unpublish — ISO 8601 datetime or Unix epoch. Sets the Scheduler unpublish_on field.
|
|
21
20
|
|
|
22
|
-
If a required parameter is missing
|
|
21
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Search nodes by title substring. Returns title, path alias, and body summary."
|
|
3
|
+
argument-hint: "<query> [site] [type] [status] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_search_content`.
|
|
7
|
+
|
|
8
|
+
Search nodes by title substring. Returns title, path alias, and body summary.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Required:**
|
|
13
|
+
- `query` (string): Search term to match against node titles
|
|
14
|
+
|
|
15
|
+
**Optional:**
|
|
16
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
17
|
+
- `type` (string): Limit to this content type (default: article)
|
|
18
|
+
- `status` (boolean (true/false)): Filter by publish status
|
|
19
|
+
- `limit` (number)
|
|
20
|
+
|
|
21
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Search content by a query string. Best-effort title match over a content type (mode:'fallback'); relevance-ranked search requires a Search API/Solr endpoint."
|
|
3
|
+
argument-hint: "<query> [site] [type] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_search`.
|
|
7
|
+
|
|
8
|
+
Search content by a query string. Best-effort title match over a content type (mode:'fallback'); relevance-ranked search requires a Search API/Solr endpoint.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Required:**
|
|
13
|
+
- `query` (string): Search term
|
|
14
|
+
|
|
15
|
+
**Optional:**
|
|
16
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
17
|
+
- `type` (string): Content type machine name (default: article)
|
|
18
|
+
- `limit` (number)
|
|
19
|
+
|
|
20
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Show the active security configuration for a site — what's allowed, what's blocked, what fields are redacted. Run this to understand the current access policy."
|
|
3
|
+
argument-hint: "[site]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_security_info`.
|
|
7
|
+
|
|
8
|
+
Show the active security configuration for a site — what's allowed, what's blocked, what fields are redacted. Run this to understand the current access policy.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Optional:**
|
|
13
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
14
|
+
|
|
15
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Transition a content node to a moderation state (content_moderation), e.g. 'draft', 'needs_review', 'published', 'archived'. Governed write."
|
|
3
|
+
argument-hint: "<type> <id> <state> [site]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Call the MCP tool `drupal_set_moderation_state`.
|
|
7
|
+
|
|
8
|
+
Transition a content node to a moderation state (content_moderation), e.g. 'draft', 'needs_review', 'published', 'archived'. Governed write.
|
|
9
|
+
|
|
10
|
+
Parse the arguments supplied with this command into this tool's parameters:
|
|
11
|
+
|
|
12
|
+
**Required:**
|
|
13
|
+
- `type` (string): Content type machine name
|
|
14
|
+
- `id` (string): Node UUID
|
|
15
|
+
- `state` (string): Target moderation state machine name
|
|
16
|
+
|
|
17
|
+
**Optional:**
|
|
18
|
+
- `site` (string): Named site from connector config. Omit only on reads: multi-site configs fall back to defaultSite (often local/dev, not production). Writes require an explicit site when more than one site is configured. Every response includes `_target` { name, baseUrl, source } (`hint` when you passed site, `default` when you did not).
|
|
19
|
+
|
|
20
|
+
If a required parameter is missing, ask before calling — do not invent values. Coerce each value to its JSON type (booleans → true/false, numbers → numeric, object/array → parse JSON), then make the single tool call and summarize the result.
|