Contentful MCP Server について
Contentful MCP Server は、Contentful Content Management API に接続するコミュニティ開発の MCP サーバーです。エントリ、アセット、コメント、スペース、環境、コンテンツタイプを管理できます。一覧操作は1リクエストあたり最大3件を返し、コンテキストの肥大化を抑えます。
主な機能
- 01エントリとアセットの完全な作成・取得・更新・削除
- 02スレッド形式のプレーンテキストとリッチテキストのコメント
- 03一括公開、非公開化、検証
- 043件ずつ返すページング付きの一覧取得
- 05stdio と StreamableHTTP の2種類のトランスポート
- 06環境変数によるスペースと環境の範囲指定
活用シーン
- 01エントリの一括移行や更新
- 02AI アシスタントからのコンテンツコメントの確認と返信
- 03エージェントの操作対象を特定のスペースと環境に限定
MCP 対応
MCP サーバーとして動作し、エントリ、アセット、コメント、コンテンツタイプなどの Contentful 管理ツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Contentful MCP サーバー
お知らせ
これはコミュニティ主導のサーバーです!Contentful は公式サーバーを公開しています。こちらからご覧いただけます:こちら
Contentful の Content Management API と連携し、包括的なコンテンツ管理機能を提供する MCP サーバーの実装です。
- ご注意ください。コードに関心がなく、Claude Desktop(または MCP サーバーを利用できる他のツール)でこの MCP を使いたいだけの場合は、このリポジトリをクローンする必要はありません。Claude Desktop で設定するだけで利用できます。インストール方法については、「Claude Desktop での使用」のセクションをご覧ください。
機能
- コンテンツ管理:エントリーとアセットに対する完全な CRUD 操作
- コメント管理:エントリーへのコメントの作成、取得、管理に対応しており、プレーンテキスト形式とリッチテキスト形式の両方、およびスレッド形式の会話をサポート
- スペース管理:スペースと環境の作成、更新、管理
- コンテンツタイプ:コンテンツタイプの定義を管理
- ローカライズ:複数のロケールをサポート
- 公開:コンテンツの公開ワークフローを制御
- 一括操作:複数のエントリーとアセットに対する一括公開、公開解除、検証を実行
- スマートページネーション:コンテキストウィンドウのオーバーフローを防ぐため、一覧取得操作ではリクエストごとに最大 3 件を返し、組み込みのページネーションをサポート
ページネーション
LLM のコンテキストウィンドウのオーバーフローを防ぐため、一覧取得操作(search_entries や list_assets など)では、リクエストごとに最大 3 件に制限されています。各レスポンスには以下が含まれます。
- 利用可能なアイテムの総数
- 現在のページのアイテム(最大 3 件)
- 残りのアイテム数
- 次のページの skip 値
- さらにアイテムを取得するよう LLM に促すメッセージ
このページネーションシステムにより、LLM はコンテキストウィンドウの制限を守りながら、大規模なデータセットを効率的に処理できます。
一括操作
一括操作機能を使用すると、複数のコンテンツアイテムを同時に効率よく管理できます。
- 非同期処理:操作は非同期で実行され、ステータスの更新が提供されます
- 効率的なコンテンツ管理:1 回の API 呼び出しで複数のエントリーまたはアセットを処理
- ステータス追跡:成功数と失敗数を確認して進捗を監視
- リソースの最適化:API 呼び出しを減らし、バッチ操作のパフォーマンスを向上
これらの一括操作ツールは、コンテンツの移行、一括更新、バッチ公開のワークフローに最適です。
ツール
エントリー管理
- search_entries:クエリパラメーターを使用してエントリーを検索
- create_entry:新しいエントリーを作成
- get_entry:既存のエントリーを取得
- update_entry:エントリーのフィールドを更新
- delete_entry:エントリーを削除
- publish_entry:エントリーを公開
- unpublish_entry:エントリーの公開を解除
コメント管理
- get_comments:ステータス(active、resolved、all)で絞り込んで、エントリーのコメントを取得
- create_comment:プレーンテキスト形式とリッチテキスト形式の両方に対応した、新しいエントリーコメントを作成します。既存のコメントへの返信として親コメント ID を指定することで、スレッド形式の会話をサポートします
- get_single_comment:ID を指定して、エントリーの特定のコメントを取得
- delete_comment:エントリーから特定のコメントを削除
- update_comment:本文の内容やステータスの変更によって、既存のコメントを更新
スレッド形式のコメント
コメントはスレッド機能に対応しており、会話を整理し、512 文字の制限を回避できます。
- コメントへの返信:
create_commentのparentパラメーターを使って、既存のコメントに返信します - スレッド形式の会話:特定のコメントに返信して、会話ツリーを構築します
- 長い議論:スレッド形式の返信を作成してメッセージを続けることで、512 文字の制限を回避します
- 会話のコンテキスト:関連するコメントをスレッドにまとめ、議論のコンテキストを維持します
使用例:
- メインのコメントを作成します:
entryId、body、statusを指定してcreate_commentを実行します - そのコメントに返信します:
entryId、body、status、parent(返信先コメントの ID)を指定してcreate_commentを実行します - スレッドを続けます:スレッド内の任意のコメントの ID を
parentに指定して返信します
一括操作
- bulk_publish:複数のエントリーとアセットを一度の操作で公開します。エンティティ(エントリーとアセット)の配列を受け取り、一括処理で公開します。
- bulk_unpublish:複数のエントリーとアセットを一度の操作で非公開にします。bulk_publish と同様ですが、コンテンツを配信 API から削除します。
- bulk_validate:コンテンツの整合性、参照、必須フィールドについて、複数のエントリーを検証します。コンテンツを変更せずに検証結果を返します。
アセット管理
- list_assets:ページネーションを使ってアセットを一覧表示します(1 ページあたり 3 件)
- upload_asset:メタデータを指定して新しいアセットをアップロードします
- get_asset:アセットの詳細と情報を取得します
- update_asset:アセットのメタデータとファイルを更新します
- delete_asset:スペースからアセットを削除します
- publish_asset:アセットを配信 API に公開します
- unpublish_asset:アセットを配信 API から非公開にします
スペースと環境の管理
- 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:コンテンツタイプを公開します
開発ツール
MCP Inspector
このプロジェクトには、開発とデバッグに役立つ MCP Inspector ツールが含まれています。
- インスペクトモード:
npm run inspectを実行してインスペクターを起動します。http://localhost:5173 にアクセスするとインスペクターを開けます - ウォッチモード:
npm run inspect:watchを使うと、ファイルが変更されたときにインスペクターが自動的に再起動します - ビジュアルインターフェース:インスペクターには、MCP ツールをテストおよびデバッグするためのウェブインターフェースが用意されています
- リアルタイムテスト:ツールを試し、応答をすぐに確認できます
- 一括操作のテスト:一括操作をテストおよび監視し、進捗と結果を視覚的に確認できます
このプロジェクトには、変更のたびに MCP サーバーを再ビルドして再読み込みする npm run dev コマンドもあります。
設定
前提条件
- Contentful で Contentful アカウントを作成します
- アカウント設定から Content Management API トークンを生成します
環境変数
これらの変数は引数としても設定できます
CONTENTFUL_HOST/--host:Contentful Management API エンドポイント(デフォルト:https://api.contentful.com)CONTENTFUL_MANAGEMENT_ACCESS_TOKEN/--management-token:Content Management API トークンENABLE_HTTP_SERVER/--http:HTTP/SSE モードを有効にするには"true"に設定しますHTTP_PORT/--port:HTTP サーバーのポート(デフォルト:3000)HTTP_HOST/--http-host:HTTP サーバーのホスト(デフォルト:localhost)DISABLE_AI_ACTIONS:起動時の AI Actions の取得を無効にするには"true"に設定します(この機能にアクセスできない場合に便利です)
スペースと環境のスコープ設定
spaceId と EnvironmentId のスコープを設定して、LLM が指定したスペース/環境 ID でのみ操作を実行するようにできます。
これは主に、特定のスペース内で動作するエージェントをサポートするためのものです。SPACE_ID と ENVIRONMENT_ID の環境変数が両方設定されている場合、
ツールはこれらの値が必要であることを通知せず、ハンドラーは環境変数を使用して CMA 操作を実行します。
また、スペースをまたいで利用するツールであるため、space-handler のツールにはアクセスできなくなります。
引数 --space-id と --environment-id を使って、SPACE_ID と ENVIRONMENT_ID を指定することもできます。
App Identity の使用
Management token を指定する代わりに、認証に App Identity を利用することもできます。 Contentful App をセットアップしてインストールし、MCP サーバーを呼び出す際に次のパラメーターを設定する必要があります。
--app-id= Apptoken を提供するアプリの ID--private-key= アプリのユーザーインターフェースで作成した、app_idに紐づく秘密鍵--space-id= アプリがインストールされている spaceId--environment-id= アプリがインストールされている環境 ID(スペース内)。
これらの値を使用して、MCP サーバーは指定されたスペース/環境 ID でコンテンツを操作するための一時的な AppToken を要求します。これは、MCP クライアントとして動作するバックエンドシステム(チャットエージェントなど)でこの MCP サーバーを使用する場合に特に便利です。
Claude Desktop での使用
この MCP を使用するために、このリポジトリをクローンする必要はありません。claude_desktop_config.json に追加するだけです。
~/Library/Application Support/Claude/claude_desktop_config.json を追加または編集し、次の行を追加します。
{
"mcpServers": {
"contentful": {
"command": "npx",
"args": ["-y", "@ivotoby/contentful-management-mcp-server"],
"env": {
"CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "<Your CMA token>"
}
}
}
}
MCPClient が環境変数の設定に対応していない場合は、次のように引数を使って管理トークンを設定することもできます。
{
"mcpServers": {
"contentful": {
"command": "npx",
"args": [
"-y",
"@ivotoby/contentful-management-mcp-server",
"--management-token",
"<your token>",
"--host",
"http://api.contentful.com"
]
}
}
}
Smithery 経由でのインストール
Smithery 経由で、Claude Desktop 用の Contentful Management Server を自動的にインストールするには、次のようにします。
npx -y @smithery/cli install @ivotoby/contentful-management-mcp-server --client claude
Claude desktop の開発と使用
貢献した内容に対して Claude がどのように動作するかをテストするには、次の手順を実行します。
npm run devを実行すると、変更のたびに MCP サーバーを再ビルドするウォッチャーが起動します。claude_desktop_config.jsonを更新して、プロジェクトを直接参照するようにします。例:
{
"mcpServers": {
"contentful": {
"command": "node",
"args": ["/Users/ivo/workspace/contentful-mcp/bin/mcp-server.js"],
"env": {
"CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "<Your CMA Token>"
}
}
}
}
これにより、MCP サーバーの変更を Claude で直接テストできます。ただし、新しいツール/リソースを追加した場合は、Claude Desktop を再起動する必要があります。
トランスポートモード
MCP サーバーは、2 つのトランスポートモードに対応しています。
stdio トランスポート
デフォルトのトランスポートモードでは、標準入力/出力ストリームを使用して通信します。これは、Claude Desktop など、stdio トランスポートに対応する MCP クライアントとの統合に最適です。
stdio モードを使用するには、--http フラグを付けずにサーバーを実行します。
npx -y contentful-mcp --management-token YOUR_TOKEN
# or alternatively
npx -y @ivotoby/contentful-management-mcp-server --management-token YOUR_TOKEN
StreamableHTTP トランスポート
このサーバーは、MCP プロトコルで定義されている StreamableHTTP トランスポートにも対応しています。このモードは、ウェブベースの統合や、サーバーをスタンドアロンサービスとして実行する場合に便利です。
StreamableHTTP モードを使用するには、--http フラグを付けて実行します。
npx -y contentful-mcp --management-token YOUR_TOKEN --http --port 3000
# or alternatively
npx -y @ivotoby/contentful-management-mcp-server --management-token YOUR_TOKEN --http --port 3000
StreamableHTTP の詳細
- 公式の MCP StreamableHTTP トランスポートを使用します。
- 標準的な MCP プロトコル操作に対応しています。
- 状態を維持するためのセッション管理を含みます。
- initialize/notify パターンを適切に処理します。
- 標準的な MCP クライアントと互換性があります。
- 非推奨の SSE トランスポートを、最新の方式に置き換えます。
この実装は標準的な MCP プロトコル仕様に準拠しているため、特別な処理を加えることなく、あらゆる MCP クライアントがサーバーに接続できます。
エラー処理
サーバーでは、次のような状況に対する包括的なエラー処理を実装しています。
- 認証の失敗
- レート制限
- 無効なリクエスト
- ネットワークの問題
- API 固有のエラー
ライセンス
MIT License
注意事項
この MCP サーバーを使用すると、Claude(または MCP リソースを利用できる他のエージェント)が、コンテンツ、スペース、コンテンツモデルを更新および削除できます。Claude に Contentful のスペースで何を許可するか、十分にご確認ください!
この MCP サーバーは、Contentful による公式サポートをまだ受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。