supacms Docs

MCP サーバー

Claude や Devin から SupaCMS を直接操作する

SupaCMS の MCP サーバーを使うと、Claude や Devin などの AI ツールから直接コンテンツを管理できます。

OAuth でサインインするだけで使えます。API キーは不要です。

接続 URL

https://cms.supa.ai/api/mcp

REST API と同じレート制限(10 秒あたり 100 リクエスト)がかかります。超えると HTTP 429 が返ります。


登録方法

Claude.ai(Web 版)

  1. claude.ai を開き、左サイドバーの Customize をクリック

  2. 設定モーダルの Connectors(Customize セクション)を選択

  3. 右上の Add → Add custom connector をクリック

  4. 以下を入力して Add をクリック

項目

値

Name

supacms(任意)

Remote MCP server URL

https://cms.supa.ai/api/mcp

  1. 追加されたコネクターの Connect をクリックし、SupaCMS のアカウントでサインイン

Devin

  1. Devin の Settings → MCP Servers を開く

  2. Add MCP Server をクリック

  3. 以下を入力

項目

値

URL

https://cms.supa.ai/api/mcp

Authentication

OAuth

  1. 初回セッション時に OAuth フローが起動するので、SupaCMS のアカウントでサインイン

Claude Code(CLI)

ターミナルで 1 コマンド実行するだけです:

claude mcp add --transport http supacms "https://cms.supa.ai/api/mcp"

追加後、Claude Code を再起動するとブラウザで OAuth サインイン画面が開きます。SupaCMS のアカウントでログインして連携完了です。


使えるツール

ツール

操作

list_orgs

所属している組織の一覧を取得する

list_projects

組織内のプロジェクト一覧を取得する

list_content_types

コンテンツタイプの一覧を取得する

create_content_type

コンテンツタイプを新規作成する

update_content_type

コンテンツタイプの名前・プレビューURLを更新する

list_fields

コンテンツタイプのフィールド一覧を取得する

add_field

コンテンツタイプにフィールドを追加する

update_field

フィールドの名前・フィールドID・設定を更新する

list_entries

エントリの一覧を取得する(省略時・最大 100 件。totalCount 付き。ステータス・reference 逆引きでフィルタ可)

create_entry

新しいエントリを作成する(常に非公開)

update_entry

エントリの内容を更新する(公開中なら下書きに保存し、配信内容は変えない)

get_preview_url

最新の編集内容を実際のサイトで確認できるプレビューURLを取得する

discard_draft

未反映の下書きを破棄して公開版だけ残す

update_entry_system

エントリのシステム項目を更新する(published_at。予約中のものを即時公開にはできない)

unpublish_entry

エントリを非公開に戻す(配信 API から外れる)

delete_entry

エントリを削除する

list_media

アップロード済みメディアの一覧を取得する

microcms_fetch

microCMS の API からコンテンツを取得する(読み取り専用)

upload_media_from_url

外部 URL のファイルを SupaCMS media にアップロードする(compress / webp は省略時 true)

html_to_tiptap

HTML を SupaCMS の rich_text 用 Tiptap JSON に変換する

権限

MCP から実行できる操作は、管理画面と同じロール(オーナー・管理者・メンバー)の権限の範囲内です。たとえばメンバーは管理画面でコンテンツタイプを作れないので、MCP からも作れません。

そのうえで、組織設定の MCP タブから、メンバーごとに MCP で許可する操作を選べます。「Aさんは管理画面ではエントリを削除できるが、MCP からは project:list と entry:list だけ」のように、管理画面の権限はそのままで MCP だけを制限できます。

  • 個別に選んでいないメンバーは、ロールの権限どおりに MCP から操作できます。

  • 個別に選んだメンバーは、選んだ操作だけに固定されます。あとでロールが変わっても選び直されません。ただしロールの権限を超えることはありません。

  • 変更できるのはオーナーと管理者です。オーナーの設定を変更できるのはオーナーだけです。

  • 設定は組織ごとです。複数の組織に所属しているメンバーは、組織ごとに設定されます。

権限

対象のツール

project:list

list_projects

contentType:list

list_content_types

contentType:get

list_fields

contentType:create

create_content_type

contentType:update

update_content_type

field:create

add_field

field:update

update_field

entry:list

list_entries

entry:get

get_preview_url

entry:create

create_entry

entry:update

update_entry / discard_draft / update_entry_system / unpublish_entry

entry:delete

delete_entry

media:list

list_media

media:create

upload_media_from_url

list_orgs / microcms_fetch / html_to_tiptap は組織のデータを読み書きしないため、権限の対象外です。権限のない操作を呼ぶと、ツールは Permission denied のエラーを返します。

MCP から公開はできません

MCP からはエントリを公開できません。作成・編集・下書きの保存まではできますが、公開・予約公開・下書きの公開版や予約への反映は管理画面から行います。

公開を塞いでいるのは MCP だけです。API キーを発行すれば、CLI の entry publish / entry create --publish と、REST API の POST /projects/:projectSlug/content-types/:ctApiId/entries/:entryId/publish からは公開できます。

非公開に戻す操作は MCP からできます。 unpublish_entry は公開中のエントリを下書きに戻すので、配信 API はそのエントリを返さなくなります。配信を止める方向の操作には、管理画面の確認が挟まりません。

公開中のエントリを update_entry で編集すると、内容は下書きとして保存され、配信 API はこれまでの内容を返し続けます。管理画面で公開して初めて配信に反映されます。

ツール

保存先

配信内容

update_entry

下書き

変わらない

discard_draft

下書きを削除

変わらない

非公開のエントリには下書きの層が無いので、update_entry はエントリ本体を直接更新します。どちらの場合でも、レスポンスに saved_to と published_content_changed が入るため、配信内容が変わったかどうかを取り違えずに判断できます。

{
  "saved_to": "draft",
  "published_content_changed": false,
  "message": "Saved to this entry's draft. ...",
  "next_steps": ["get_preview_url", "discard_draft"],
  "entry": { "...": "下書きの内容" }
}

見た目の確認(プレビュー)

get_preview_url は、下書きを含む最新の編集内容を実際のサイトで開くURLを返します。AI エージェントは編集のあとにこのURLを案内し、公開前に見た目を確認してもらえます。

{
  "configured": true,
  "preview_url": "https://example.com/preview?id=...&draftKey=...",
  "expires_at": "2026-10-17T05:00:00.000Z"
}
  • URLは expires_at まで有効で、知っている人なら誰でも開けます。有効なURLがあるあいだは同じURLを返します

  • コンテンツにプレビューURLが設定されていないときは configured: false を返します。管理画面のコンテンツ設計、または update_content_type の preview_url_template で設定してください

  • 共有したURLを止める(再発行する)操作は管理画面から行います

予約公開待ちのエントリを update_entry で編集した場合、下書きは予約時刻になっても自動では反映されません。予約配信に含めるには、管理画面の「予約へ反映する」を使ってください。また update_entry_system で予約中のエントリの published_at を現在や過去の日時に変えることはできません(即時公開になるため)。

update_entry の data は渡したフィールドだけを書き換えます。省略したフィールドは現在の値のまま残ります。

reference フィールド

add_field / update_field の type に reference を指定すると、他の ContentType のエントリへの参照(リレーション)を定義できます。参照先の ContentType ID が必須です。

add_field の例:

  • type: reference

  • ref_content_type_id: 参照先 ContentType の UUID(list_content_types の id)

  • multiple: 複数参照にする場合は true(省略時は false)

extra_config でも渡せます: { "contentTypeId": "<uuid>", "multiple": false }

エントリの data には展開オブジェクトではなく ID を渡します。

  • 単一参照(multiple: false): { "author": "<entryId>" }

  • 複数参照(multiple: true): { "tags": ["<id1>", "<id2>"] }

list_entries / create_entry / update_entry のレスポンスでは、reference フィールドは参照先エントリオブジェクトに展開されます。絞り込みは filters を使います(テキスト: slug[equals]hello-world、単一参照: author[equals]<entryId>、複数参照: tags[contains]<entryId>)。list_entries はコンテンツタイプの件数 totalCount も返すので、ページネーションに全件取得は不要です。

select フィールド

add_field / update_field の type に select を指定すると、定義済みの選択肢から値を選ぶフィールドになります。extra_config.options が必須です。

add_field の例:

  • type: select

  • extra_config: { "options": ["news", "blog"] }

  • multiple: 複数選択にする場合は true(省略時は false)

エントリの data には選択肢の文字列を渡します。

  • 単一選択(multiple: false): { "category": "news" }

  • 複数選択(multiple: true): { "tags": ["news", "blog"] }

使用例

設定が完了すると、Claude や Devin に話しかけるだけでコンテンツを管理できます。

「ブログで非公開のもの一覧を見せて」

「新しいお知らせを作成して。タイトルは『夏季休業のご案内』で、本文は…」

「ID が xxx のエントリの本文を直して」

microCMS からの移行

microcms_fetch / upload_media_from_url / html_to_tiptap を使うと、既存の microCMS の内容を Claude に読み取らせて SupaCMS に移行できます。microCMS の API キーはツール呼び出しの都度渡すだけで、SupaCMS 側には保存されません。

「microCMS のサービス ID は xxx、API キーは xxx です。news API の内容を全部読んで、SupaCMS の blog プロジェクトに移行して」

Claude はおおよそ次の手順で進めます。

  1. microcms_fetch で対象 API の内容を取得する(offset を進めながら全件取得)

  2. 取得した内容の構造から create_content_type / add_field でコンテンツタイプを設計する

  3. 画像フィールドやリッチテキスト内の画像は upload_media_from_url で SupaCMS media に取り込む

  4. リッチテキスト(HTML)は html_to_tiptap で Tiptap JSON に変換する(image_url_map に手順 3 で取得した新しい URL を渡すと、本文内の画像 URL も差し替えられる。表および表セル内の画像も保持される)

  5. create_entry でエントリを作成する(非公開のまま作られる)。公開は管理画面で行う。移行元の公開日時(過去の日時)を残す場合は、管理画面で公開したあとに update_entry_system へ published_at(ISO 8601)を渡す