
Contentful MCP Serverを使ってみた!AIで自然言語からコンテンツを操作する
最近何かと話題の「MCP (Model Context Protocol)」。弊社でもブログ執筆が盛んです。
ヘッドレスCMSのContentfulも例外ではなく、最近Contentfulの中の人がMCP Serverを公開していたので触ってみました。この「contentful-mcp」を使うことで、AIに指示するだけでContentfulのCRUD操作が可能になります。
この記事ではContentful MCPの使い方や注意点を紹介します。
Contentful MCPとは?
MCPについては、弊社 shuntaka さんが書いた分かりやすいスライドがありますので読んでみてください。
今回紹介するContentful MCP Serverは、GitHubのivo-toby/contentful-mcpリポジトリで公開されています。
Contentfulのコンテンツ管理(CMA)APIと統合され、Organization/SpaceレベルのCRUDが可能な、包括的なコンテンツ管理機能を提供します。
主要機能
エントリーの一括作成/削除、モデル管理、Spaceの削除など、色々できてしまってちょっと怖いですね。権限セーフティガードをかける方法は後述します。
エントリー管理
search_entries # クエリパラメータを使用してエントリを検索
create_entry # 新しいエントリを作成
get_entry # 既存エントリを取得
update_entry # エントリフィールドを更新
delete_entry # エントリを削除
publish_entry # エントリを公開
unpublish_entry # エントリの公開を取り消し
バルクオペレーション
bulk_publish # 複数のエントリとアセットを一括公開
bulk_unpublish # 複数のエントリとアセットの公開を一括取り消し
bulk_validate # 複数エントリの内容整合性、参照、必須フィールドを検証
アセット管理
list_assets # アセットをページング付きでリスト(1ページあたり3アイテム)
upload_asset # メタデータ付きの新規アセットをアップロード
get_asset # アセット詳細と情報を取得
update_asset # アセットのメタデータとファイルを更新
delete_asset # スペースからアセットを削除
publish_asset # Delivery APIにアセットを公開
unpublish_asset # Delivery APIからアセットの公開を取り消し
Space&Environment管理
list_spaces # 利用可能なスペースを一覧表示
get_space # スペースの詳細を取得
list_environments # スペース内の環境を一覧表示
create_environment # 新規環境を作成
delete_environment # 環境を削除
コンテンツモデル管理
list_content_types # 利用可能なコンテンツタイプを一覧表示
get_content_type # コンテンツタイプの詳細を取得
create_content_type # 新規コンテンツタイプを作成
update_content_type # コンテンツタイプを更新
delete_content_type # コンテンツタイプを削除
publish_content_type # コンテンツタイプを公開
主な特徴
スマートページネーション
AIアシスタントのコンテキストウィンドウ(一度に処理できる情報量の制限)に対応するため、リスト操作は 1リクエストあたり最大3アイテム に制限されています:
- 利用可能アイテムの総数
- 現在のページのアイテム(最大3)
- 残りのアイテム数
- 次ページのスキップ値
- 追加取得を促すメッセージ
例えば:
「ブログ記事をすべて取得して」→ 「3件表示します。残り97件あります。もっと見ますか?」
「次の3件を表示して」→ 「さらに3件表示します。残り94件...」
これにより大量のエントリがあっても処理できます。
バルク操作
バルク操作機能は、複数のアイテムを同時に効率的に管理する機能を提供します:
- 非同期処理: 操作は非同期で実行され、ステータス更新を提供
- 効率的なコンテンツ管理: 単一のAPI呼び出しで複数のエントリやアセットを処理
- ステータス追跡: 成功と失敗のカウントで進捗を監視
- リソース最適化: APIコールを削減し、バッチ操作のパフォーマンスを向上
これらのバルク操作ツールは、コンテンツ移行、一括更新、バッチ公開ワークフローに最適です。
セットアップ方法
前提条件
必要なもの:
- Contentfulアカウント
- Content Management APIトークン
インストール方法
1. Claude Desktopの直接セットアップ
コードに興味がなく、単にClaude Desktopで使用したい場合はこの方法が最も簡単です:
~/Library/Application Support/Claude/claude_desktop_config.json
を編集- 以下を追加:
{
"mcpServers": {
"contentful": {
"command": "npx",
"args": ["-y", "@ivotoby/contentful-management-mcp-server"],
"env": {
"CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "<CMAトークン>"
}
}
}
}
環境変数非対応のMCPクライアント用の代替設定:
{
"mcpServers": {
"contentful": {
"command": "npx",
"args": ["-y", "@ivotoby/contentful-management-mcp-server", "--management-token", "<トークン>", "--host", "http://api.contentful.com"],
}
}
}
2. npmでのインストール
開発環境での使用や独自の連携を行う場合:
npm install @ivotoby/contentful-management-mcp-server
3. Smitheryでの自動インストール
Smitheryを使ってClaude Desktopに自動インストール:
npx -y @smithery/cli install @ivotoby/contentful-management-mcp-server --client claude
環境変数設定
設定可能なオプション:
CONTENTFUL_HOST
/--host
: API エンドポイント(デフォルト:https://api.contentful.com
)CONTENTFUL_MANAGEMENT_ACCESS_TOKEN
/--management-token
: 管理APIトークン
Space&Environmentの制限(EXPERIMENTAL)
現在EXPERIMENTALステータスですが、特定のSpace&Environmentに操作を限定できるオプションもあります:
SPACE_ID
/--space-id
: 対象Space IDENVIRONMENT_ID
/--environment-id
: 対象Environment ID
App Identityの利用
管理トークンを直接提供する代わりに、App Identityを使用した認証も可能です。この方法では、ContentfulにAppをセットアップ・インストールし、MCPサーバー呼び出し時に以下のパラメータを設定します:
--app-id
: App ID--private-key
: 秘密鍵--space-id
: AppがインストールされたSpace ID--environment-id
: App がインストールされたEnv ID
エラーハンドリング
MCP Server側で以下の包括的なエラーハンドリングを実装しています:
- 認証失敗
- レート制限
- 無効なリクエスト
- ネットワークの問題
- API固有のエラー
注意点
注意したいのは、権限の扱いです。発行したAPIキーは発行元ユーザーと同じ権限を持ちます。つまり、管理者権限を持つユーザーが発行したAPIキーを使用すると、Spaceの削除やコンテンツモデルの変更など、取り返しのつかない操作まで可能になります。
これはAIアシスタントに操作を任せる際に特に重要です。AIが意図せず危険な操作を実行する可能性があります。
対策としては:
- 作業ごとに、権限を必要最小限に絞ったユーザーアカウントを都度作成し、それぞれでAPIキーを発行する
- 本番環境ではスペース/環境を限定する機能を活用する
まとめ
このContentful MCP Serverを利用することで、バルク操作や環境管理など、面倒な作業を自動化できるのが最大の魅力です。例えば既存の記事を読み込んで、それぞれに適切なタグ付けをすることも可能になります。
一方で、記事量が多くなってきた際の安定性や、権限的な注意点もあります。Contentfulユーザーの方は、自身のプロジェクトの特性を考慮した上で、導入を検討してみてはいかがでしょうか。