Strapi MCP について
Strapi MCP は、Strapi CMS 向けの MCP サーバーで、コンテンツタイプとエントリーを Model Context Protocol 経由で利用できます。AI ツールから Strapi のコンテンツを読み書きしたい開発者に適しています。エラー診断と設定の検証を備え、コンテンツタイプ、コンポーネント、メディア、リレーションを扱います。
主な機能
- 01コンテンツタイプをリソースとして公開
- 02エントリーの作成、取得、更新、削除
- 03メディアファイルのアップロードとリレーションの接続
- 04コンテンツタイプとコンポーネントの作成と更新
- 05エントリーの公開と非公開化
活用シーン
- 01AI ツールによる Strapi の記事コンテンツの作成や更新
- 02開発中のコンテンツタイプのスキーマ確認
- 03Strapi エントリーへのメディアファイルのアップロード
MCP 対応
本サーバーは Strapi のコンテンツタイプを MCP リソースとして公開し、エントリー、コンポーネント、メディア、リレーションを操作するツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Strapi MCP
Strapi CMS 用の MCP サーバーです。Model Context Protocol を通じて、コンテンツタイプとエントリーにアクセスできます。
概要
この MCP サーバーは、あらゆる Strapi CMS インスタンスと連携し、次の機能を提供します。
- Strapi のコンテンツタイプにリソースとしてアクセス
- Strapi でコンテンツタイプを作成および更新するツール
- コンテンツエントリーを管理するツール(作成、読み取り、更新、削除)
- 開発モードでの Strapi のサポート
- 堅牢なエラー処理と、明確な診断およびトラブルシューティングのガイダンス
- よくあるセットアップの問題を防ぐ設定の検証
セットアップ
環境変数
認証情報の保存には、プロジェクトルートに .env ファイルを用意することをおすすめします。
STRAPI_URL:Strapi インスタンスの URL(デフォルト:http://localhost:1337)STRAPI_ADMIN_EMAIL:Strapi 管理者ユーザーのメールアドレス(特にスキーマへのアクセスなど、すべての機能を利用する場合に推奨)。STRAPI_ADMIN_PASSWORD:Strapi 管理者ユーザーのパスワード(推奨)。STRAPI_API_TOKEN:(任意のフォールバック)API トークンです。管理者の認証情報を指定しない場合に使用できますが、権限が制限される場合があります。STRAPI_DEV_MODE:開発モード機能を有効にするには"true"に設定します(デフォルトはfalse)。
.env ファイルの例:
STRAPI_URL=http://localhost:1337
[email protected]
STRAPI_ADMIN_PASSWORD=your_admin_password
# STRAPI_API_TOKEN=your_api_token_here # Optional
重要:
- 認証情報のコミットを避けるため、
.envを.gitignoreファイルに追加してください "strapi_token"のようなプレースホルダー値は使用しないでください。サーバーが一般的なプレースホルダーを検証し、拒否します
インストール
npm からインストール(推奨)
npm install strapi-mcp
ソースからインストール(開発)
最新の開発機能を利用するには:
git clone https://github.com/l33tdawg/strapi-mcp.git
cd strapi-mcp
npm install
npm run build
実行
推奨方法(Cursor MCP 設定を使用):
Cursor ユーザーの場合は、~/.cursor/mcp.json ファイルで strapi-mcp サーバーを設定します。
"strapi-mcp": {
"command": "npx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "[email protected]",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
ソースからインストールした場合は、代わりに直接パスを指定してください。
"strapi-mcp": {
"command": "node",
"args": ["/path/to/strapi-mcp/build/index.js"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "[email protected]",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
Cursor は strapi-mcp ツールの使用時に、サーバーのライフサイクルを自動的に管理します。
代替方法(.env ファイルを使用):
プロジェクトがビルド済みであることを確認してください(npm run build)。次に、--env-file フラグを使って Node.js v20.6.0+ でサーバーを実行します。
node --env-file=.env build/index.js
代替方法(環境変数を直接使用):
export STRAPI_URL=http://localhost:1337
export [email protected]
export STRAPI_ADMIN_PASSWORD=your_admin_password
# export STRAPI_API_TOKEN=your-api-token # Optional fallback
export STRAPI_DEV_MODE=true # optional
# Run the globally installed package (if installed via npm install -g)
strapi-mcp
# Or run the local build directly
node build/index.js
機能
- コンテンツタイプの一覧表示と読み取り
- エントリーの取得、作成、更新、削除
- メディアファイルのアップロード
- リレーションの接続と切断
- コンテンツタイプのスキーマ取得
変更履歴
0.2.3 - 2025-07-25
- 重大な修正: リレーションツールのタイムアウト問題を修正しました。connect_relation と disconnect_relation で、タイムアウトせずに検証エラーを適切に処理できるようになりました。
- エラー処理の改善: すべての検証エラーで、ツールのタイムアウトを引き起こす代わりに適切なエラーメッセージを返すようになりました。
0.2.2 - 2025-07-25
- リレーションツールの強化:
connect_relationとdisconnect_relationのエラー処理を改善し、詳細な検証メッセージとトラブルシューティングメッセージを追加しました。 - CREATE_COMPONENT の修正: パラメーター検証のバグを修正しました。単一のオブジェクトではなく、個々のパラメーターを適切に検証するようになりました。
- エラー診断の改善: 無効なリレーションフィールド、存在しないエントリー、不正な形式の ID に対する具体的なエラーメッセージを追加しました。
- 20 個のツールすべてが、堅牢なエラー処理と検証により 100%動作するようになりました。
0.2.0 - 2025-07-25
- 重大なバグ修正: validateStrapiConnection が「undefined response status」エラーを引き起こす問題を修正しました。
- MCP 接続問題の解決: AI ツールで「緑色のライトが点灯しているのに動作しない」問題を修正しました。
- エラー処理の改善: 管理者認証を適切に処理できるよう、接続検証ロジックを改善しました。
- AI ツールで MCP 接続の問題が発生している場合は、このバージョンに更新してください。
0.1.9 - 2025-07-02
- コンテキストウィンドウのオーバーフロー修正: base64 ファイルがコンテキストウィンドウを圧迫しないよう、サイズ制限とレスポンスのフィルタリングを追加しました。
- 新しいツール:
upload_media_from_pathを追加しました。ローカルのファイルパスからファイル(最大 10 MB)をアップロードし、base64 によるコンテキストの問題を回避できます。 - UPLOAD_MEDIA の強化: base64 のサイズ制限(1 MB、ファイルサイズ約 750 KB)を追加し、コンテキストのオーバーフローに関する明確なエラーメッセージを表示するようになりました。
- ログの改善: ログの大量出力とコンテキストのオーバーフローを防ぐため、ログ内の base64 データを切り詰めるようにしました。
- レスポンスのフィルタリング: API レスポンス内の大きな base64 文字列を自動的にフィルタリングし、エコーによるオーバーフローを防ぎます。
0.1.8 - 2025-06-12
- 重大なバグ修正: コンテンツタイプまたはエントリーを取得できない場合に、エラーを表示せずに失敗する代わりに、内容が明確なエラーメッセージを返すようにしました。
- 設定検証の追加: プレースホルダーの API トークンを検出し、役立つエラーメッセージを表示して終了します。
- 接続検証の追加: 操作の実行前に Strapi への接続をテストし、問題を特定するエラー診断を表示します。
- エラー処理の強化: 正常な空のコレクションと実際のエラーを区別する、包括的なエラー診断を追加しました。
- トラブルシューティングの改善: すべてのエラーメッセージに、よくある設定問題を解決するための具体的な手順が含まれるようになりました。
0.1.7 - 2025-05-17
publish_entryおよびunpublish_entryツールの追加: コンテンツのライフサイクルを完全に管理できます。- コンポーネント管理の追加:
list_components、get_component_schema、create_component、update_component delete_content_typeツールの追加: Content-Type Builder API を使用して、既存のコンテンツタイプを削除できます。- 管理者認証の強化: すべての API 操作におけるエラー処理とトークン管理を改善しました。
0.1.6
create_content_typeツールの追加: Content-Type Builder API を使用して新しいコンテンツタイプを作成できます(管理者の認証情報が必要です)。- 管理者の認証情報を優先: コンテンツタイプとスキーマの取得時に管理者のメールアドレスとパスワードを優先するようロジックを更新し、信頼性を向上させました。
- ドキュメントの更新: 認証方法と推奨される実行手順を明確にしました。
0.1.5
- 複数のフォールバック方法により、コンテンツタイプの検出を改善
- より堅牢なエラー処理とログ出力を追加
- コンテンツタイプのスキーマ推論を強化
0.1.4
- より具体的なエラーコードにより、エラー処理を改善
ResourceNotFoundとAccessDeniedのエラーコードを追加- よくある API エラーのエラーメッセージを改善
0.1.3
- 初回公開リリース
ライセンス
MIT
strapi-mcp MCP サーバー
Strapi CMS 用の MCP サーバーです
Strapi CMS と連携する、TypeScript ベースの MCP サーバーです。MCP プロトコルを通じて Strapi のコンテンツタイプやエントリーにアクセスでき、次のことができます。
- Strapi のコンテンツタイプにリソースとしてアクセスする
- コンテンツエントリーの作成、読み取り、更新、削除
- MCP ツールを使って Strapi のコンテンツを管理する
機能
リソース
strapi://content-type/URI を使ってコンテンツタイプを一覧表示し、アクセスする- 各コンテンツタイプはエントリーを JSON として公開する
- 構造化コンテンツへのアクセスに対応した Application/JSON MIME タイプ
ツール
list_content_types- Strapi で利用可能なすべてのコンテンツタイプを一覧表示するget_entries- オプションのフィルタリング、ページネーション、並べ替え、関連データの展開を指定して、特定のコンテンツタイプのエントリーを取得するget_entry- ID を指定して特定のエントリーを取得するcreate_entry- コンテンツタイプの新しいエントリーを作成するupdate_entry- 既存のエントリーを更新するdelete_entry- エントリーを削除するupload_media- メディアファイルを Strapi にアップロードする(base64 のコンテキスト制限により、ファイルサイズは最大約 750KB)upload_media_from_path- ローカルのファイルパスからメディアファイルをアップロードする(最大 10MB。コンテキストのオーバーフローを回避)get_content_type_schema- 特定のコンテンツタイプのスキーマ(フィールド、型、リレーション)を取得する。connect_relation- 関連するエントリーを、エントリーのリレーションフィールドに接続する。disconnect_relation- 関連するエントリーを、エントリーのリレーションフィールドから切断する。create_content_type- Content-Type Builder API を使って新しいコンテンツタイプを作成する(管理者権限が必要)。publish_entry- 特定のエントリーを公開する。unpublish_entry- 特定のエントリーの公開を解除する。list_components- Strapi で利用可能なすべてのコンポーネントを一覧表示する。get_component_schema- 特定のコンポーネントのスキーマを取得する。create_component- 新しいコンポーネントを作成する。update_component- 既存のコンポーネントを更新する。
高度な機能
フィルタリング、ページネーション、並べ替え
get_entries ツールは、高度なクエリオプションに対応しています。
{
"contentType": "api::article.article",
"filters": {
"title": {
"$contains": "hello"
}
},
"pagination": {
"page": 1,
"pageSize": 10
},
"sort": ["title:asc", "createdAt:desc"],
"populate": ["author", "categories"]
}
リソース URI
リソースには、さまざまな URI 形式でアクセスできます。
strapi://content-type/api::article.article- すべての記事を取得するstrapi://content-type/api::article.article/1- ID 1 の記事を取得するstrapi://content-type/api::article.article?filters={"title":{"$contains":"hello"}}- フィルタリングされた記事を取得する
コンテンツの公開と公開解除
publish_entry と unpublish_entry ツールを使って、コンテンツのライフサイクルを制御できます。
{
"contentType": "api::article.article",
"id": "1"
}
これらのツールは、公開および公開解除の操作に管理 API のパスを使用します。管理者権限を利用できない場合は、publishedAt フィールドを直接更新する方法にフォールバックします。
コンポーネント管理
Strapi のコンポーネントは、次のツールで管理できます。
list_components:利用可能なすべてのコンポーネントを取得するget_component_schema:特定のコンポーネントの構造を確認するcreate_component:指定したフィールドで新しいコンポーネントを作成するupdate_component:既存のコンポーネントを変更する
コンポーネントの作成例:
{
"componentData": {
"displayName": "Security Settings",
"category": "security",
"icon": "shield",
"attributes": {
"enableTwoFactor": {
"type": "boolean",
"default": false
},
"passwordExpiration": {
"type": "integer",
"min": 0
}
}
}
}
開発
依存関係をインストールします。
npm install
サーバーをビルドします。
npm run build
自動再ビルドを有効にして開発する場合:
npm run watch
インストール
この MCP サーバーのデプロイとテストの詳しい手順については、DEPLOYMENT.md ファイルをご覧ください。
簡単なセットアップ:
- サーバーをビルドします:
npm run build - Strapi インスタンスを設定し、API トークンを取得します
- Claude Desktop にサーバー設定を追加します。
MacOS の場合:~/Library/Application Support/Claude/claude_desktop_config.json
Windows の場合:%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"strapi-mcp": {
"command": "npx",
"args": ["strapi-mcp"],
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "[email protected]",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
}
}
ソースからインストールした場合は、直接パスを使用します。
{
"mcpServers": {
"strapi-mcp": {
"command": "/path/to/strapi-mcp/build/index.js",
"env": {
"STRAPI_URL": "http://localhost:1337",
"STRAPI_ADMIN_EMAIL": "[email protected]",
"STRAPI_ADMIN_PASSWORD": "your_admin_password"
}
}
}
}
環境変数
STRAPI_URL(任意):Strapi インスタンスの URL(デフォルトは http://localhost:1337)STRAPI_ADMIN_EMAIL&STRAPI_ADMIN_PASSWORD(推奨):Strapi 管理者ユーザーの認証情報。コンテンツタイプのスキーマ取得など、すべての機能を利用するには必須です。STRAPI_API_TOKEN(任意のフォールバック):Strapi API トークン。管理者の認証情報が指定されていない場合に使用できますが、トークンの権限によっては機能が制限される場合があります。STRAPI_DEV_MODE(任意):開発モードの機能を有効にするには「true」に設定します(デフォルトは false)。
認証の優先順位
サーバーは、次の順序で認証方法を優先します。
- 管理者のメールアドレスとパスワード(
STRAPI_ADMIN_EMAIL、STRAPI_ADMIN_PASSWORD) - API トークン(
STRAPI_API_TOKEN)
最良の結果を得るには、管理者の認証情報を使用することを強くおすすめします。
Strapi の認証情報を取得する
- 管理者の認証情報: 既存のスーパー管理者のメールアドレスとパスワードを使用するか、Strapi 管理パネル(Settings > Administration Panel > Users)で専用の管理者ユーザーを作成します。
- API トークン:(任意のフォールバック)
- Strapi 管理パネルにログインします
- Settings > API Tokens に移動します
- 「Create new API Token」をクリックします
- 名前、説明、トークンタイプ(「Full access」を推奨)を設定します
- 生成されたトークンをコピーし、MCP サーバーの設定で使用します
トラブルシューティング
よくある問題と解決策:
1. プレースホルダーの API トークンエラー
[Error] STRAPI_API_TOKEN appears to be a placeholder value...
解決策: "strapi_token" または "your-api-token-here" を、Strapi 管理パネルで取得した実際の API トークンに置き換えます。
2. 接続拒否エラー
Cannot connect to Strapi instance: Connection refused. Is Strapi running at http://localhost:1337?
解決策:
- Strapi が実行中であることを確認します:
npm run developまたはyarn develop STRAPI_URLの URL が正しいことを確認します- データベース(MySQL/PostgreSQL)が実行中であることを確認します
3. 認証失敗
Cannot connect to Strapi instance: Authentication failed. Check your API token or admin credentials.
解決策:
- API トークンに適切な権限(「Full access」を推奨)があることを確認します
- 管理者のメールアドレスとパスワードが正しいことを確認します
- 管理者ユーザーが存在し、有効になっていることを確認します
4. ファイルアップロード時のコンテキストウィンドウの超過
Error: Context window overflow due to large base64 strings
問題: Base64 でエンコードされたファイルは非常に大きくなることがあり(小さな画像でもテキストで 50~100KB になる場合があります)、コンテキストウィンドウの超過を引き起こします。
解決策:
- 約 500KB を超えるファイルには、
upload_mediaの代わりにupload_media_from_pathを使用します - アップロード前にファイルサイズを小さくします(画像を圧縮する、解像度を下げる)
- 小さなファイルを使用します。
upload_mediaツールの Base64 上限は 1MB です(ファイルサイズで約 750KB)
5. 偽のコンテンツタイプ(api::data.data、api::error.error)
この問題は v0.1.8 で修正されています。これらが引き続き表示される場合は、古いバージョンを使用している可能性があります。
6. 空の結果とエラー
v0.1.8 以降、サーバーは次の状態を明確に区別します。
- 空のコレクション(コンテンツタイプは存在するがエントリーがない)→
{"data": [], "meta": {...}}を返します - 実際のエラー(コンテンツタイプが存在しない、認証に失敗したなど)→ トラブルシューティング手順を含む、内容が明確なエラーをスローします
7. 権限エラー
Access forbidden. Your API token may lack necessary permissions.
解決策:
- すべての機能を利用するには、API トークンの代わりに管理者の認証情報を使用します
- API トークンを使用する場合は、「Full access」権限があることを確認します
- 制限付き API トークンを使用する場合は、コンテンツタイプでパブリックアクセスが許可されていることを確認します
デバッグ
MCP サーバーは stdio 経由で通信するため、デバッグは難しい場合があります。パッケージスクリプトとして利用できる MCP Inspector の使用をおすすめします。
npm run inspector
Inspector は、ブラウザーでデバッグツールにアクセスするための URL を提示します。
使用例
MCP サーバーを設定して実行したら、Claude と連携させて Strapi CMS を操作できます。以下に例を示します。
コンテンツタイプの一覧表示
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "list_content_types",
arguments: {}
)
エントリーの取得
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "get_entries",
arguments: {
"contentType": "api::article.article",
"filters": {
"title": {
"$contains": "hello"
}
},
"pagination": {
"page": 1,
"pageSize": 10
},
"sort": ["title:asc"]
}
)
エントリーの作成
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "create_entry",
arguments: {
"contentType": "api::article.article",
"data": {
"title": "My New Article",
"content": "This is the content of my article.",
"publishedAt": "2023-01-01T00:00:00.000Z"
}
}
)
メディアのアップロード
方法 1:Base64 アップロード(小さなファイルのみ)
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "upload_media",
arguments: {
"fileData": "base64-encoded-data-here",
"fileName": "image.jpg",
"fileType": "image/jpeg"
}
)
方法 2:ファイルパスによるアップロード(大きなファイルにおすすめ)
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "upload_media_from_path",
arguments: {
"filePath": "/path/to/your/image.jpg"
}
)
リレーションの接続
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "connect_relation",
arguments: {
"contentType": "api::article.article",
"id": "1",
"relationField": "authors",
"relatedIds": [2, 3]
}
)
リレーションの切断
use_mcp_tool(
server_name: "strapi-mcp",
tool_name: "disconnect_relation",
arguments: {
"contentType": "api::article.article",
"id": "1",
"relationField": "authors",
"relatedIds": [3]
}
)
コンテンツタイプの作成
use_mcp_tool(
server_name: "strapi-mcp-local",
tool_name: "create_content_type",
arguments: {
"displayName": "My New Product",
"singularName": "product",
"pluralName": "products",
"kind": "collectionType",
"description": "Represents products in the store",
"draftAndPublish": true,
"attributes": {
"name": { "type": "string", "required": true },
"description": { "type": "text" },
"price": { "type": "decimal", "required": true },
"stock": { "type": "integer" }
}
}
)
コンテンツタイプの更新
use_mcp_tool(
server_name: "strapi-mcp-local",
tool_name: "update_content_type",
arguments: {
"contentType": "api::speaker.speaker",
"attributes": {
"isHighlightSpeaker": {
"type": "boolean",
"default": false
},
"newTextField": {
"type": "string"
}
}
}
)
リソースへのアクセス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。