Skip to content

Commit 75deefc

Browse files
committed
Sync from dev e359c75: Fix strict_types fatal: move use statements after declare
1 parent 09fa578 commit 75deefc

302 files changed

Lines changed: 3928 additions & 1262 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,16 @@ jobs:
4343
uses: shivammathur/setup-php@v2
4444
with:
4545
php-version: '8.4'
46-
tools: phpcs
4746

4847
- name: Install Drupal Coding Standards
4948
run: |
5049
composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
5150
composer global require drupal/coder
52-
phpcs --config-set installed_paths ~/.composer/vendor/drupal/coder/coder_sniffer
5351
5452
- name: Run PHPCS
5553
run: |
54+
export PATH="$HOME/.composer/vendor/bin:$PATH"
5655
phpcs --standard=Drupal,DrupalPractice . --extensions=php,module,install,inc --ignore=*/tests/*,*/vendor/*,*/node_modules/*,*/tmp/*,*/.ddev/*
57-
continue-on-error: true
5856
5957
phpunit:
6058
name: PHPUnit (Drupal ${{ matrix.drupal-version }})
@@ -65,7 +63,7 @@ jobs:
6563
include:
6664
- drupal-version: '10.3'
6765
php-version: '8.3'
68-
- drupal-version: '11.0'
66+
- drupal-version: '11.1'
6967
php-version: '8.4'
7068

7169
services:
@@ -173,6 +171,12 @@ jobs:
173171
<testsuite name="unit">
174172
<directory>web/modules/contrib/mcp_tools/tests/src/Unit</directory>
175173
<directory>web/modules/contrib/mcp_tools/modules/*/tests/src/Unit</directory>
174+
<!-- Contrib-dependent submodules: their tests need classes not installed in CI -->
175+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_metatag/tests</exclude>
176+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_pathauto/tests</exclude>
177+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_scheduler/tests</exclude>
178+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_sitemap/tests</exclude>
179+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_ultimate_cron/tests</exclude>
176180
</testsuite>
177181
<testsuite name="kernel">
178182
<directory>web/modules/contrib/mcp_tools/tests/src/Kernel</directory>
@@ -407,6 +411,12 @@ jobs:
407411
<testsuite name="unit">
408412
<directory>web/modules/contrib/mcp_tools/tests/src/Unit</directory>
409413
<directory>web/modules/contrib/mcp_tools/modules/*/tests/src/Unit</directory>
414+
<!-- Contrib-dependent submodules: their tests need classes not installed in CI -->
415+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_metatag/tests</exclude>
416+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_pathauto/tests</exclude>
417+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_scheduler/tests</exclude>
418+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_sitemap/tests</exclude>
419+
<exclude>web/modules/contrib/mcp_tools/modules/mcp_tools_ultimate_cron/tests</exclude>
410420
</testsuite>
411421
<testsuite name="kernel">
412422
<directory>web/modules/contrib/mcp_tools/tests/src/Kernel</directory>
@@ -460,7 +470,7 @@ jobs:
460470
./vendor/bin/phpunit --testsuite unit,kernel,functional --coverage-clover=coverage.xml --colors=always
461471
462472
- name: Upload coverage to Codecov
463-
uses: codecov/codecov-action@v4
473+
uses: codecov/codecov-action@v5
464474
with:
465475
files: drupal/coverage.xml
466476
flags: unittests
@@ -537,7 +547,7 @@ jobs:
537547
# Enable all submodules (skip those with unmet dependencies)
538548
for module in mcp_tools_analysis mcp_tools_batch mcp_tools_blocks mcp_tools_cache mcp_tools_config \
539549
mcp_tools_content mcp_tools_cron mcp_tools_entity_clone mcp_tools_image_styles \
540-
mcp_tools_layout_builder mcp_tools_media mcp_tools_menus mcp_tools_metatag \
550+
mcp_tools_jsonapi mcp_tools_layout_builder mcp_tools_media mcp_tools_menus mcp_tools_metatag \
541551
mcp_tools_migration mcp_tools_moderation mcp_tools_paragraphs mcp_tools_pathauto \
542552
mcp_tools_recipes mcp_tools_redirect mcp_tools_scheduler mcp_tools_search_api \
543553
mcp_tools_sitemap mcp_tools_structure mcp_tools_templates mcp_tools_theme \

.github/workflows/full-tool-registration.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ jobs:
4646
cd drupal
4747
composer require drush/drush --no-interaction
4848
composer require drupal/tool:1.0.0-alpha9 mcp/sdk:^0.2.2 -W --no-interaction
49+
composer require code-wheel/mcp-http-security:^1.0 code-wheel/mcp-error-codes:^1.2 code-wheel/mcp-events:^2.0 code-wheel/mcp-schema-builder:^1.1 code-wheel/mcp-tool-gateway:^1.1 -W --no-interaction
4950
5051
# Optional contrib dependencies for all submodules.
5152
composer require \
@@ -93,7 +94,7 @@ jobs:
9394
# Enable all submodules.
9495
for module in mcp_tools_analysis mcp_tools_batch mcp_tools_blocks mcp_tools_cache mcp_tools_config \
9596
mcp_tools_content mcp_tools_cron mcp_tools_entity_clone mcp_tools_image_styles \
96-
mcp_tools_layout_builder mcp_tools_media mcp_tools_menus mcp_tools_metatag \
97+
mcp_tools_jsonapi mcp_tools_layout_builder mcp_tools_media mcp_tools_menus mcp_tools_metatag \
9798
mcp_tools_migration mcp_tools_moderation mcp_tools_paragraphs mcp_tools_pathauto \
9899
mcp_tools_recipes mcp_tools_redirect mcp_tools_scheduler mcp_tools_search_api \
99100
mcp_tools_sitemap mcp_tools_structure mcp_tools_templates mcp_tools_theme \

.github/workflows/release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ jobs:
8585
- name: Install MCP dependencies
8686
run: |
8787
cd drupal
88-
composer require drupal/tool:1.0.0-alpha9 mcp/sdk:^0.2.2 code-wheel/mcp-http-security:^1.0 -W --no-interaction
88+
composer require drupal/tool:1.0.0-alpha9 mcp/sdk:^0.2.2 code-wheel/mcp-http-security:^1.0 code-wheel/mcp-error-codes:^1.2 code-wheel/mcp-events:^2.0 code-wheel/mcp-schema-builder:^1.1 code-wheel/mcp-tool-gateway:^1.1 -W --no-interaction
8989
9090
- name: Copy module
9191
run: |
@@ -201,7 +201,7 @@ jobs:
201201
202202
### Compatibility
203203
204-
- Drupal 10.3.x, 11.0.x
204+
- Drupal 10.3.x, 11.x
205205
- PHP 8.3, 8.4
206206
207207
### Links
@@ -212,7 +212,7 @@ jobs:
212212
EOF
213213
214214
- name: Create GitHub Release
215-
uses: softprops/action-gh-release@v1
215+
uses: softprops/action-gh-release@v2
216216
with:
217217
name: MCP Tools v${{ needs.validate.outputs.version }}
218218
body_path: release_notes.md

.github/workflows/security.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@ jobs:
2424
with:
2525
fetch-depth: 0
2626

27-
- name: Install Gitleaks
28-
run: |
29-
curl -sSfL https://github.com/gitleaks/gitleaks/releases/download/v8.18.4/gitleaks_8.18.4_linux_x64.tar.gz | tar -xz
30-
chmod +x gitleaks
31-
3227
- name: Run Gitleaks
33-
run: |
34-
./gitleaks detect --source . --config .gitleaks.toml --verbose
28+
uses: gitleaks/gitleaks-action@v2
29+
with:
30+
args: --config .gitleaks.toml --verbose
31+
env:
32+
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}
3533

3634
php-security:
3735
name: PHP Security Check

README.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ mcp_tools/ # Base module (25 read-only tools)
145145
│ └── ErrorFormatter.php # Standardized error responses
146146
└── modules/
147147
├── mcp_tools_content/ # Content CRUD (4 tools)
148-
├── mcp_tools_structure/ # Content types, fields, taxonomy, roles (12 tools)
148+
├── mcp_tools_structure/ # Content types, fields, taxonomy, roles (20 tools)
149149
├── mcp_tools_users/ # User management (5 tools)
150150
├── mcp_tools_menus/ # Menu management (5 tools)
151151
├── mcp_tools_views/ # Views management (6 tools)
@@ -168,12 +168,13 @@ mcp_tools/ # Base module (25 read-only tools)
168168
├── mcp_tools_pathauto/ # URL aliases (6 tools)
169169
├── mcp_tools_redirect/ # URL redirects (7 tools)
170170
├── mcp_tools_sitemap/ # XML sitemap (7 tools)
171-
├── mcp_tools_search_api/ # Search API (8 tools)
171+
├── mcp_tools_search_api/ # Search API (9 tools)
172172
├── mcp_tools_entity_clone/ # Entity cloning (4 tools)
173173
├── mcp_tools_analysis/ # Site analysis (8 tools)
174174
├── mcp_tools_batch/ # Bulk operations (6 tools)
175175
├── mcp_tools_templates/ # Site templates (5 tools)
176-
└── mcp_tools_migration/ # Content migration (7 tools)
176+
├── mcp_tools_migration/ # Content migration (7 tools)
177+
└── mcp_tools_jsonapi/ # JSON:API entity CRUD (6 tools)
177178
```
178179

179180
Enable submodules as needed:
@@ -287,7 +288,7 @@ Available scopes:
287288
- `write` - Write operations
288289
- `admin` - Administrative operations
289290

290-
## Read-Only Tools (22)
291+
## Read-Only Tools (25)
291292

292293
### Site Health
293294

@@ -320,6 +321,8 @@ Available scopes:
320321
| `get_config_status` | Config sync status (active vs staged) |
321322
| `get_config` | View specific configuration object |
322323
| `list_config` | List config names with optional prefix filter |
324+
| `list_text_formats` | List all available text formats |
325+
| `get_text_format` | Get details about a specific text format |
323326

324327
### Users
325328

@@ -342,14 +345,14 @@ Available scopes:
342345
|------|-------------|
343346
| `mcp_tools_list_available` | List all available MCP tools by category or search |
344347

345-
## Write Submodules (197 tools across 29 submodules)
348+
## Write Submodules (197 tools across 30 submodules)
346349

347350
Enable submodules for the capabilities you need. Each submodule's tools are listed in its own `README.md`.
348351

349352
| Submodule | Tools | Description |
350353
|-----------|------:|-------------|
351354
| `mcp_tools_content` | 4 | Content CRUD (create, update, delete, publish) |
352-
| `mcp_tools_structure` | 12 | Content types, fields, vocabularies, roles, permissions |
355+
| `mcp_tools_structure` | 20 | Content types, fields, vocabularies, roles, permissions |
353356
| `mcp_tools_users` | 5 | User accounts, roles, blocking |
354357
| `mcp_tools_menus` | 5 | Menus and menu links |
355358
| `mcp_tools_views` | 6 | Views creation and management |
@@ -371,12 +374,13 @@ Enable submodules for the capabilities you need. Each submodule's tools are list
371374
| `mcp_tools_pathauto` | 6 | URL alias patterns (requires `pathauto`) |
372375
| `mcp_tools_redirect` | 7 | URL redirects (requires `redirect`) |
373376
| `mcp_tools_sitemap` | 7 | XML sitemap management (requires `simple_sitemap`) |
374-
| `mcp_tools_search_api` | 8 | Search indexes and servers (requires `search_api`) |
377+
| `mcp_tools_search_api` | 9 | Search indexes and servers (requires `search_api`) |
375378
| `mcp_tools_entity_clone` | 4 | Entity cloning (requires `entity_clone`) |
376379
| `mcp_tools_analysis` | 8 | SEO, security, accessibility, performance audits |
377380
| `mcp_tools_batch` | 6 | Bulk content operations (max 50 items/batch) |
378381
| `mcp_tools_templates` | 5 | Site templates (blog, portfolio, business, docs) |
379382
| `mcp_tools_migration` | 7 | CSV/JSON import and export (max 100 items) |
383+
| `mcp_tools_jsonapi` | 6 | Generic entity CRUD via JSON:API (requires `jsonapi`) |
380384

381385
**Safety built in:** uid 1 protected, administrator role unassignable, system menus/views/themes guarded, dangerous permissions blocked, batch limits enforced, base64 uploads capped.
382386

composer.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
"drupal/tool": "^1.0@alpha",
2121
"mcp/sdk": "^0.2.2",
2222
"code-wheel/mcp-http-security": "^1.0",
23-
"code-wheel/mcp-error-codes": "^1.1",
23+
"code-wheel/mcp-error-codes": "^1.2",
2424
"code-wheel/mcp-events": "^2.0",
25-
"code-wheel/mcp-schema-builder": "^1.0",
26-
"code-wheel/mcp-tool-gateway": "^1.0"
25+
"code-wheel/mcp-schema-builder": "^1.1",
26+
"code-wheel/mcp-tool-gateway": "^1.1"
2727
}
2828
}

docs/ARCHITECTURE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ MCP Tools provides a comprehensive set of tools for AI assistants to interact wi
2020
│ mcp_tools module │
2121
│ ┌──────────────────┐ ┌──────────────────┐ ┌───────────────┐ │
2222
│ │ Tool Plugins │ │ Services │ │ Access Control│ │
23-
│ │ (210+ tools) │ │ (Business Logic) │ │ (3 layers) │ │
23+
│ │ (222 tools) │ │ (Business Logic) │ │ (3 layers) │ │
2424
│ └────────┬─────────┘ └────────┬─────────┘ └───────┬───────┘ │
2525
│ │ │ │ │
2626
│ └─────────────────────┼────────────────────┘ │
@@ -35,7 +35,7 @@ MCP Tools provides a comprehensive set of tools for AI assistants to interact wi
3535
### Base Module (`mcp_tools`)
3636

3737
The base module provides:
38-
- **22 read-only tools** for site introspection
38+
- **25 read-only tools** for site introspection
3939
- **Core services** (AccessManager, RateLimiter, AuditLogger)
4040
- **Admin UI** for configuration
4141
- **McpToolsToolBase** base class for all tool plugins

mcp_tools.module

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,23 @@ function mcp_tools_help($route_name, RouteMatchInterface $route_match) {
1717
case 'help.page.mcp_tools':
1818
$output = '<h3>' . t('About') . '</h3>';
1919
$output .= '<p>' . t('MCP Tools provides batteries-included tools for AI assistants working with Drupal sites via the Model Context Protocol (MCP).') . '</p>';
20-
$output .= '<h3>' . t('Available Tools (22 read-only)') . '</h3>';
20+
$output .= '<h3>' . t('Available Tools (25 read-only)') . '</h3>';
2121
$output .= '<dl>';
2222
$output .= '<dt>' . t('Site Health') . '</dt>';
2323
$output .= '<dd>' . t('GetSiteStatus, GetSystemStatus, CheckSecurityUpdates, CheckCronStatus, AnalyzeWatchdog, GetQueueStatus, GetFileSystemStatus') . '</dd>';
2424
$output .= '<dt>' . t('Content') . '</dt>';
2525
$output .= '<dd>' . t('ListContentTypes, GetRecentContent, SearchContent, GetVocabularies, GetTerms, GetFiles, FindOrphanedFiles') . '</dd>';
2626
$output .= '<dt>' . t('Configuration') . '</dt>';
27-
$output .= '<dd>' . t('GetConfigStatus, GetConfig, ListConfig') . '</dd>';
27+
$output .= '<dd>' . t('GetConfigStatus, GetConfig, ListConfig, ListTextFormats, GetTextFormat') . '</dd>';
2828
$output .= '<dt>' . t('Users') . '</dt>';
2929
$output .= '<dd>' . t('GetRoles, GetUsers, GetPermissions') . '</dd>';
3030
$output .= '<dt>' . t('Structure') . '</dt>';
3131
$output .= '<dd>' . t('GetMenus, GetMenuTree') . '</dd>';
32+
$output .= '<dt>' . t('Discovery') . '</dt>';
33+
$output .= '<dd>' . t('ListAvailableTools') . '</dd>';
3234
$output .= '</dl>';
3335
$output .= '<h3>' . t('Write Operations') . '</h3>';
34-
$output .= '<p>' . t('Enable the MCP Tools Write submodule for 21 additional write tools (content types, fields, roles, taxonomies, menus).') . '</p>';
36+
$output .= '<p>' . t('197 write/analysis tools across 34 optional submodules. Enable the submodules you need for content, structure, views, blocks, media, and more.') . '</p>';
3537
return $output;
3638
}
3739
}

modules/mcp_tools_analysis/src/Plugin/tool/Tool/AnalyzePerformance.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use Drupal\mcp_tools\Tool\McpToolsToolBase;
1212
use Drupal\tool\Attribute\Tool;
1313
use Drupal\tool\Tool\ToolOperation;
14-
use Drupal\tool\TypedData\InputDefinition;
1514

1615
/**
1716
* Tool plugin implementation.
@@ -81,8 +80,4 @@ protected function executeLegacy(array $input): array {
8180
return $this->analysisService->analyzePerformance();
8281
}
8382

84-
85-
86-
87-
8883
}

modules/mcp_tools_analysis/src/Plugin/tool/Tool/AnalyzeSeo.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,4 @@ protected function executeLegacy(array $input): array {
115115
return $this->analysisService->analyzeSeo($entityType, $entityId);
116116
}
117117

118-
119-
120-
121-
122118
}

0 commit comments

Comments
 (0)