🚀 MCP Tools
Drupalサイトで動作するAIアシスタント向けの、充実した機能を備えたMCPツールです。
🚀 クイックスタート
MCP Toolsは、Drupalサイトで動作するAIアシスタント向けのツールセットです。このツールは、実際の問題を解決するための高度な機能を提供します。
✨ 主な機能
- 幅広いツールセット:223のツールが用意されており、35のサブモジュールにまたがる25の読み取り専用ツールと198の書き込み/分析操作があります。
- AIによるサイト構築:自然な会話を通じて、コンテンツタイプ、フィールド、ロール、タクソノミー、ビュー、ブロック、メディア、ウェブフォーム、テーマ、レイアウトの作成やレシピの適用が可能です。
- 管理UI:
/admin/config/services/mcp-toolsで設定を構成でき、アクセス制御、レート制限、ウェブフック通知などを管理できます。
- オブザーバビリティ機能:ツールの実行イベントを送信し、カスタムロギング、メトリクス、またはウェブフックを使用できます。
📦 インストール
composer require drupal/mcp_tools
drush en mcp_tools
ローカルMCP (STDIO) セットアップ (推奨)
drush en mcp_tools_stdio
drush mcp-tools:serve --uid=1
ヒント: Drushはしばしばuid 0 (匿名) として起動します。ローカル開発では--uid=1を使用し、共有環境では必要なMCP Toolsの権限のみを持つ専用ユーザーを使用します。
ゲートウェイモード (オプション): ツールリストのサイズを減らすために、discover/info/executeツールのみを公開します。
drush mcp-tools:serve --uid=1 --gateway
ゲートウェイツール:
mcp_tools/discover-tools
mcp_tools/get-tool-info
mcp_tools/execute-tool
リモートMCP (HTTP) セットアップ (実験的)
drush en mcp_tools_remote
drush mcp-tools:remote-key-create --label="My Key" --scopes=read --ttl=86400
MCPクライアントで/_mcp_toolsのエンドポイントを構成し、キーをAuthorization: Bearer …またはX-MCP-Api-Key: …として送信します。
信頼できる内部ネットワークでのみ使用してください。実行ユーザーを/admin/config/services/mcp-tools/remoteで構成します (開発用には "uid 1" チェックボックスを使用し、本番環境では専用のmcp_executorアカウントを作成します)。IPとOrigin/Hostの許可リストを設定することを検討し、必要な場合を除きキーを読み取り専用に保ちます。
リモートクライアントのツールリストのサイズを減らすために、リモート設定UIでゲートウェイモードを有効にします。これにより、discover/info/executeツールのみが公開され、許可されたツールを名前で実行できます。
💻 使用例
基本的な使用法
drush en mcp_tools_stdio -y
drush mcp-tools:serve --uid=1
MCP_SCOPE=read,write drush mcp-tools:serve --uid=1
高度な使用法
drush en mcp_tools_remote -y
drush mcp-tools:remote-key-create --label="My Key" --scopes=read --ttl=86400
MCPクライアントを構成して/_mcp_toolsを使用し、キーをAuthorization: Bearer …またはX-MCP-Api-Key: …として送信します。
/admin/config/services/mcp-tools/remoteでエンドポイントを構成します (開発用には "uid 1" を使用するか、専用のmcp_executorアカウントを作成します。IPとOrigin/Hostの許可リストを検討してください)。
📚 ドキュメント
mcp_tools/docs/QUICKSTART.md — 5分でのオンボーディング
mcp_tools/docs/TROUBLESHOOTING.md — 一般的なエラーと修正方法
mcp_tools/docs/CLIENT_INTEGRATIONS.md — MCPクライアントの設定 (STDIO + HTTP)
mcp_tools/docs/USE_CASES.md — 実際のワークフロー
🔧 技術詳細
バージョン互換性
| Drupalバージョン |
PHPバージョン |
状態 |
注 |
| 10.3.x |
8.3 |
✅ テスト済み |
サポートされる最小バージョン |
| 11.x |
8.4 |
✅ テスト済み |
Drupal 11はPHP 8.4+が必要 |
PHPサポート: 8.3, 8.4
CIは、すべてのサポートされるDrupalバージョンに対して、すべてのプッシュでテストを実行します。
アーキテクチャ: 細かいサブモジュール
MCP Toolsはモジュール化アーキテクチャを使用しており、各機能領域は別々のサブモジュールとなっています。これにより、必要な機能のみを有効にすることができます。
mcp_tools/ # ベースモジュール (25の読み取り専用ツール)
├── src/
│ ├── Form/SettingsForm.php # /admin/config/services/mcp-toolsの管理UI
│ └── Service/
│ ├── AccessManager.php # 3層のアクセス制御
│ ├── RateLimiter.php # 書き込み操作のレート制限
│ ├── AuditLogger.php # サニタイズされた監査ログ
│ ├── WebhookNotifier.php # ウェブフック通知
│ └── ErrorFormatter.php # 標準化されたエラーレスポンス
└── modules/
├── mcp_tools_content/ # コンテンツのCRUD (4つのツール)
├── mcp_tools_structure/ # コンテンツタイプ、フィールド、タクソノミー、ロール (20のツール)
├── mcp_tools_users/ # ユーザー管理 (5つのツール)
├── mcp_tools_menus/ # メニュー管理 (5つのツール)
├── mcp_tools_views/ # ビュー管理 (6つのツール)
├── mcp_tools_blocks/ # ブロック配置 (5つのツール)
├── mcp_tools_media/ # メディア管理 (6つのツール)
├── mcp_tools_webform/ # ウェブフォーム統合 (7つのツール)
├── mcp_tools_theme/ # テーマ設定 (8つのツール)
├── mcp_tools_layout_builder/ # レイアウトビルダー (9つのツール)
├── mcp_tools_recipes/ # Drupalレシピ (6つのツール)
├── mcp_tools_config/ # 設定管理 (5つのツール)
├── mcp_tools_observability/ # ツール実行ログのサブスクライバー
├── mcp_tools_paragraphs/ # パラグラフ統合 (6つのツール)
├── mcp_tools_moderation/ # コンテンツモデレーション (6つのツール)
├── mcp_tools_scheduler/ # スケジュールされた公開 (5つのツール)
├── mcp_tools_metatag/ # SEOメタタグ (5つのツール)
├── mcp_tools_image_styles/ # 画像スタイル (7つのツール)
├── mcp_tools_cache/ # キャッシュ管理 (6つのツール)
├── mcp_tools_cron/ # クロン管理 (5つのツール)
├── mcp_tools_ultimate_cron/ # ウルティメイトクロン (6つのツール)
├── mcp_tools_pathauto/ # URLエイリアス (6つのツール)
├── mcp_tools_redirect/ # URLリダイレクト (7つのツール)
├── mcp_tools_sitemap/ # XMLサイトマップ (7つのツール)
├── mcp_tools_search_api/ # 検索API (9つのツール)
├── mcp_tools_entity_clone/ # エンティティの複製 (4つのツール)
├── mcp_tools_analysis/ # サイト分析 (8つのツール)
├── mcp_tools_batch/ # バルク操作 (6つのツール)
├── mcp_tools_templates/ # サイトテンプレート (5つのツール)
├── mcp_tools_migration/ # コンテンツ移行 (7つのツール)
├── mcp_tools_jsonapi/ # JSON:APIエンティティのCRUD (6つのツール)
└── mcp_tools_remote_media/ # リモートファイルの取得とメディア (1つのツール)
必要に応じてサブモジュールを有効にします:
drush en mcp_tools_content
drush en mcp_tools_structure
drush en mcp_tools_users
drush en mcp_tools_menus
drush en mcp_tools_views
drush en mcp_tools_blocks
drush en mcp_tools_media
drush en mcp_tools_webform
drush en mcp_tools_theme
drush en mcp_tools_layout_builder
drush en mcp_tools_recipes
drush en mcp_tools_config
drush en mcp_tools_paragraphs
drush en mcp_tools_moderation
drush en mcp_tools_scheduler
drush en mcp_tools_metatag
drush en mcp_tools_image_styles
drush en mcp_tools_cache
drush en mcp_tools_cron
drush en mcp_tools_ultimate_cron
drush en mcp_tools_pathauto
drush en mcp_tools_redirect
drush en mcp_tools_sitemap
drush en mcp_tools_search_api
drush en mcp_tools_entity_clone
drush en mcp_tools_analysis
drush en mcp_tools_batch
drush en mcp_tools_templates
drush en mcp_tools_migration
drush en mcp_tools_remote_media
一般的なスターターバンドル:
drush en mcp_tools_structure mcp_tools_views mcp_tools_blocks mcp_tools_menus mcp_tools_users mcp_tools_content mcp_tools_media -y
drush en mcp_tools_cache mcp_tools_cron mcp_tools_batch mcp_tools_analysis -y
アクセス制御
MCP Toolsは3層のアクセス制御を提供します:
1. モジュールベースのアクセス
有効になっているサブモジュールのみがそのツールを公開します。
2. グローバルな読み取り専用モード
サイト全体ですべての書き込み操作を無効にするトグル:
$config['mcp_tools.settings']['access']['read_only_mode'] = TRUE;
3. 接続スコープ
接続ごとのアクセスレベル (読み取り/書き込み/管理)。
デフォルト: 新しいインストールはaccess.default_scopesを介してreadのみで開始します。
セキュリティデフォルト: HTTPスコープの上書きはデフォルトで無効になっています。信頼できるリバースプロキシがクライアントが提供するスコープヘッダー/パラメーターを削除/上書きする場合のみ、これを有効にしてください。
X-MCP-Scope: read,write
?mcp_scope=read,write
MCP_SCOPE=read,write drush mcp-tools:serve --uid=1
サーバープロファイル (YAMLのみ)
mcp_tools_servers.settings.ymlで複数のMCPサーバープロファイルを定義し、STDIOの--serverオプションまたはリモートのserver_id設定を介して選択します。
新しいインストールにはdevelopment、staging、productionのプリセットが含まれています。default_serverを目的のプリセットに更新します。
default_server: default
servers:
default:
name: 'Drupal MCP Tools'
version: '1.0.0'
pagination_limit: 50
include_all_tools: false
gateway_mode: false
enable_resources: true
enable_prompts: true
component_public_only: false
transports: ['http', 'stdio']
scopes: ['read', 'write']
スコープは常にaccess.allowed_scopesによって制限されます。信頼できる上書きがない場合、access.default_scopesが使用されます。
transportsを設定して、どのエントリポイント (HTTP/STDIO) がプロファイルを実行できるかを制限します。空または省略すると、すべてのトランスポートが許可されます。
component_public_onlyを設定して、明示的に公開とマークされたコンポーネントのみを公開します。
利用可能なスコープ:
read - 読み取り専用操作
write - 書き込み操作
admin - 管理操作
読み取り専用ツール (25)
サイトの健全性
| ツール |
説明 |
get_site_status |
Drupal/PHPバージョン、モジュール数、クロン、メンテナンスモード |
get_system_status |
システム要件、PHP情報、データベースの状態 |
check_security_updates |
コアとコントリビュートモジュールのセキュリティ更新 |
check_cron_status |
クロンの健全性と最後の実行時間 |
analyze_watchdog |
ログ分析 - エラー、警告、要約 |
get_queue_status |
キューのアイテム数とワーカーの状態 |
get_file_system_status |
ディレクトリのパーミッション、ディスク使用量 |
コンテンツ
| ツール |
説明 |
list_content_types |
フィールド定義付きのコンテンツタイプ |
get_recent_content |
最近作成/更新されたコンテンツ |
search_content |
タイトルベースのコンテンツ検索 |
get_vocabularies |
用語数付きのタクソノミーボキャブラリー |
get_terms |
ボキャブラリーからの用語 (フラットまたは階層的) |
get_files |
MIMEブレイクダウン付きの管理されたファイル |
find_orphaned_files |
未使用のファイルの検出 |
設定
| ツール |
説明 |
get_config_status |
設定の同期状態 (アクティブ vs ステージング) |
get_config |
特定の設定オブジェクトを表示 |
list_config |
オプションのプレフィックスフィルター付きで設定名をリスト表示 |
list_text_formats |
使用可能なすべてのテキスト形式をリスト表示 |
get_text_format |
特定のテキスト形式の詳細を取得 |
ユーザー
| ツール |
説明 |
get_roles |
権限付きのロール |
get_users |
ユーザーアカウント、ステータス、アクティビティ |
get_permissions |
プロバイダー別のすべての権限 |
構造
| ツール |
説明 |
get_menus |
リンク数付きのすべてのメニュー |
get_menu_tree |
階層的なメニュー構造 |
検出
| ツール |
説明 |
mcp_tools_list_available |
カテゴリまたは検索によってすべての利用可能なMCPツールをリスト表示 |
書き込みサブモジュール (31のサブモジュールにまたがる198のツール)
必要な機能のサブモジュールを有効にします。各サブモジュールのツールは、それぞれのREADME.mdに記載されています。
| サブモジュール |
ツール数 |
説明 |
mcp_tools_content |
4 |
コンテンツのCRUD (作成、更新、削除、公開) |
mcp_tools_structure |
20 |
コンテンツタイプ、フィールド、ボキャブラリー、ロール、権限 |
mcp_tools_users |
5 |
ユーザーアカウント、ロール、ブロック |
mcp_tools_menus |
5 |
メニューとメニューリンク |
mcp_tools_views |
6 |
ビューの作成と管理 |
mcp_tools_blocks |
5 |
ブロックの配置と構成 |
mcp_tools_media |
6 |
メディアタイプ、アップロード、エンティティ |
mcp_tools_webform |
7 |
ウェブフォームの管理と送信 ( webform が必要) |
mcp_tools_theme |
8 |
テーマ設定、有効/無効化 |
mcp_tools_layout_builder |
9 |
レイアウトセクション、ブロック、プラグイン ( layout_builder が必要) |
mcp_tools_recipes |
6 |
Drupalレシピ — 適用には admin スコープが必要 (10.3+) |
mcp_tools_config |
5 |
設定の差分、エクスポート、MCPの変更追跡、プレビュー |
mcp_tools_paragraphs |
6 |
パラグラフタイプとフィールド ( paragraphs が必要) |
mcp_tools_moderation |
6 |
コンテンツモデレーションワークフロー ( content_moderation が必要) |
mcp_tools_scheduler |
5 |
スケジュールされた公開/非公開 ( scheduler が必要) |
mcp_tools_metatag |
5 |
SEOメタタグ ( metatag が必要) |
mcp_tools_image_styles |
7 |
画像スタイルとエフェクト |
mcp_tools_cache |
6 |
キャッシュのクリア、無効化、再構築 |
mcp_tools_cron |
5 |
クロンジョブとキュー |
mcp_tools_ultimate_cron |
6 |
ウルティメイトクロンジョブ管理 ( ultimate_cron が必要) |
mcp_tools_pathauto |
6 |
URLエイリアスパターン ( pathauto が必要) |
mcp_tools_redirect |
7 |
URLリダイレクト ( redirect が必要) |
mcp_tools_sitemap |
7 |
XMLサイトマップ管理 ( simple_sitemap が必要) |
mcp_tools_search_api |
9 |
検索インデックスとサーバー ( search_api が必要) |
mcp_tools_entity_clone |
4 |
エンティティの複製 ( entity_clone が必要) |
mcp_tools_analysis |
8 |
SEO、セキュリティ、アクセシビリティ、パフォーマンスの監査 |
mcp_tools_batch |
6 |
バルクコンテンツ操作 (バッチあたり最大50アイテム) |
mcp_tools_templates |
5 |
サイトテンプレート (ブログ、ポートフォリオ、ビジネス、ドキュメント) |
mcp_tools_migration |
7 |
CSV/JSONのインポートとエクスポート (最大100アイテム) |
mcp_tools_jsonapi |
6 |
JSON:APIを介した汎用エンティティのCRUD ( jsonapi が必要) |
mcp_tools_remote_media |
1 |
リモートファイルの取得とメディアの作成 |
組み込みの安全性: uid 1が保護され、管理者ロールを割り当てることができず、システムメニュー/ビュー/テーマが保護され、危険な権限がブロックされ、バッチ制限が適用され、Base64アップロードが制限されます。
オブザーバビリティフック
MCP Toolsは、ツールの実行中にPSR-14イベントを送信します。code-wheel/mcp-eventsからこれらのクラスをサブスクライブします:
CodeWheel\McpEvents\ToolExecutionStartedEvent
CodeWheel\McpEvents\ToolExecutionSucceededEvent
CodeWheel\McpEvents\ToolExecutionFailedEvent
イベントには、ツール名、プラグインID、サニタイズされた引数、リクエストID、および実行時間が含まれます。失敗したイベントには、理由定数 (例: REASON_VALIDATION, REASON_ACCESS_DENIED) が含まれます。
オプションのmcp_tools_observabilityサブモジュールを有効にすると、実行イベントをウォッチドッグにログ記録できます。
セキュリティ
組み込みの保護
- デフォルトでモジュール化 - 必要なサブモジュールのみを有効にします。
- 3層のアクセス制御 - モジュール、グローバルトグル、接続スコープ。
- 権限ベース - 各カテゴリには独自のDrupal権限があります。
- 監査ログ - すべての書き込み操作がユーザー情報とともにログに記録されます。
- 読み取り操作の制限 - 高コストの読み取り操作はレート制限されます (壊れたリンク、コンテンツ検索)。
- 機密データの編集 - パスワードとシークレットは決してログに記録されません。
- 保護されたエンティティ - uid 1、管理者ロール、コアビュー/メニューが保護されます。
- 危険な権限のブロック - MCPを介してサイト管理者権限を付与することはできません。
保護されたエンティティ
| エンティティ |
保護 |
| ユーザーID 1 |
変更またはブロックすることができません。 |
| 管理者ロール |
MCPを介して割り当てることができません。 |
| システムメニュー |
admin、main、footer、tools、accountが保護されています。 |
| コアビュー |
コアが提供するビューを削除することはできません。 |
| アクティブなテーマ |
現在のデフォルト/管理テーマを無効にすることはできません。 |
ブロックされた権限
これらの権限は、MCPを介して決して付与することができません:
administer permissions
administer users
administer site configuration
administer modules
administer software updates
administer themes
bypass node access
synchronize configuration
import configuration
export configuration
セキュリティ上の考慮事項
| リスク |
対策 |
状態 |
| プロンプトインジェクション |
悪意のあるコンテンツがAIに指示を与える可能性があります。 |
⚠️ 本番環境では読み取り専用を使用してください。 |
| 権限昇格 |
危険な権限がブロックされています。 |
✅ 実装済み |
| コンテンツインジェクション (XSS) |
Drupalのテキストフィルタリングに依存しています。 |
✅ Drupalが処理します。 |
| 大量作成によるDoS |
レート制限があります。 |
✅ 実装済み |
| データの外部流出 |
読み取りツールがサイト情報を公開します。 |
⚠️ 適切な認証を使用してください。 |
| 設定のズレ |
変更がGitに反映されていません。 |
⚠️ 変更後にエクスポートしてください。 |
本番環境の強化
MCP Toolsを本番環境で使用する場合は、次のようにします:
$config['mcp_tools.settings']['access']['read_only_mode'] = TRUE;
$config['mcp_tools.settings']['access']['default_scopes'] = ['read'];
$config['mcp_tools.settings']['rate_limiting']['enabled'] = TRUE;
$config['mcp_tools.settings']['rate_limiting']['max_writes_per_minute'] = 10;
$config['mcp_tools.settings']['rate_limiting']['max_writes_per_hour'] = 100;
追加の推奨事項:
- ウェブサーバーレベルでIP許可リストを使用します。
- MCPエンドポイントに認証を要求します。
- 監査ログを監視して異常なアクティビティを検出します。
- 本番環境では書き込みサブモジュールを無効にします。
- AI支援開発には別の環境を使用します。
設定管理の警告
MCP Toolsは設定を直接データベースに作成します。これにより、設定のズレが発生する可能性があります:
開発者が設定をGitにコミットする
↓
本番環境にデプロイする
↓
AIがMCPを介して新しいコンテンツタイプを作成する (データベースのみ!)
↓
次のデプロイ: 設定の競合または上書き!
ベストプラクティス: 書き込みツールを使用した後は、常に設定をエクスポートします:
drush config:export
git add config/
git commit -m "Export MCP-created configuration"
テスト
すべてのサービスにPHPUnitテストが含まれています:
cd mcp_tools
../vendor/bin/phpunit
推奨使用法
MCP Toolsは主にローカル開発とプロトタイピングを目的として設計されています。
| 環境 |
読み取りツール |
書き込みツール |
推奨事項 |
| ローカル開発 |
✅ 安全 |
✅ 安全 |
全機能を使用できます。 |
| ステージング |
✅ 安全 |
⚠️ 注意が必要 |
設定のみのモードまたは制限されたスコープを使用してください。 |
| 本番環境 |
⚠️ 注意が必要 |
❌ 推奨されません |
強く読み取り専用モードをお勧めします (避けられない場合は設定のみ)。 |
書き込みツールが本番環境で危険な理由:
- データベースに設定を作成するため、バージョン管理されたコードには反映されません。
- AIアシスタントはプロンプトインジェクションによって操作される可能性があります。
- 変更が適用される前に人間のレビューステップがないため、Gitリポジトリとの設定のズレが発生する可能性があります。
理想的なワークフロー:
- ローカルでMCP Toolsを使用してサイトをスキャフォールディングします。
- 設定のみのモードを有効にして、変更をコードとしてレビュー可能にします。
- 設定をエクスポートします:
drush config:export
- Gitにコミットし、通常のCI/CDを通じてデプロイします。
- 本番環境を読み取り専用モードに保ちます。
CLIヘルパー
drush mcp:servers
drush mcp:dev-profile
drush mcp:server-info --server=default --tools --resources --prompts
drush mcp:server-smoke --server=default
drush mcp:components-validate
drush mcp:scaffold --machine-name=my_module --name="My MCP Module"
代替手段: drupal/mcp_server
組み込みのトランスポートの代わりにMCP Serverを使用する場合、それ自体のDrushコマンド (例: drush mcp:server) を提供します。
MCP Tools用にMCP Serverツール設定を準備するには、オプションのブリッジを有効にして同期します:
drush en mcp_tools_mcp_server -y
drush mcp-tools:mcp-server-sync --enable-read
これは、推奨されるデフォルト (mcp_tools_stdio) を置き換えることを意図していません。上流のmcp_serverが安定したときの互換性オプションです。
🤝 コントリビューション
問題とマージリクエストはこちら: https://www.drupal.org/project/issues/mcp_tools
📄 ライセンス
GPL-2.0-or-later