このサイトは非公式の日本語訳です。Cloudflare・EmDashプロジェクトが運営するサイトではありません。

このページで分かること

  • EmDashに組み込まれたサイトのMCPサーバー(/_emdash/api/mcp)の役割、Docs MCPとの違い、無効にする方法
  • Claude・ChatGPT・CodexからサイトのMCPサーバーに接続する方法と、AIに依頼できる作業(コンテンツ、バイライン、メディア、検索、タクソノミー、メニュー、サイト設定、スキーマ、リビジョン)
  • OAuthで許可する権限とユーザーロールの関係と、AIに作業を依頼するときの注意点(下書きで作り、確認してから公開する など)
難易度
基礎
読む時間
7分
前提知識
CMSとは
このページの目次

EmDashには、Model Context Protocol(MCP)のサーバーが組み込まれており、AIアシスタントがサイトのコンテンツを直接操作できます。Claude、ChatGPTなどのツールに、投稿の下書き、ページの更新、メディアの管理、コンテンツの検索などを、ふだんの会話で依頼できます。

サイトのMCPサーバー

MCPサーバーは初期状態で有効です。無効にしない限り、EmDashは /_emdash/api/mcp を用意します。このエンドポイントは、OAuthのトークンまたは個人用アクセストークンをBearerトークンとして受け付けます。管理画面のブラウザーのセッションだけでは、MCPのリクエストは認証されません。OAuthでは、クライアントを接続する人が、EmDashがトークンを発行する前にスコープを選べます。

無効にするには、Astroの設定で mcp: false を設定します。

astro.config.mjs
emdash({
	mcp: false,
});
本サイトの補足 やさしい解説

このページの「MCPサーバー」は、ClaudeやChatGPTなどのAIが、自分のサイトの記事を読んだり下書きを作ったりするための窓口です。WordPressの管理画面で人が行う作業の一部を、AIに会話で依頼できるようになります。名前の似た「Docs MCP」は、EmDashの公式ドキュメントを調べるための別のサーバーで、自分のサイトのコンテンツは扱いません。AIに接続するときは、どちらのURLを登録しているかを確認します。

AIクライアントの接続

サイトのMCPサーバーのURLは次のとおりです。

https://example.com/_emdash/api/mcp

example.com は自分のドメインに置き換えます。ローカル開発では http://localhost:4321/_emdash/api/mcp を使います。

Claude

URLをリモートのカスタムコネクターとして追加します。ClaudeがEmDashのOAuthの手順を開くので、ログインして権限を選びます。Anthropicは、EmDashとは関係なくコネクターの画面を変更するため、正確な操作とプランの要件は、Anthropicの最新のカスタムコネクターの説明に従います。

ChatGPT

ChatGPTの開発者モードでは、リモートのMCPサーバーに接続でき、OAuthで認証するツールに対応しています。利用条件や設定画面は変わることがあるため、ChatGPTの開発者モードの公式ガイドに従い、アプリを作成するときにサイトのMCPのURLを使います。書き込みの呼び出しは、承認する前に1つずつ確認します。

Codex

Codex CLIからリモートサーバーを追加し、OAuthのログインを始めます。

codex mcp add emdash-site --url https://example.com/_emdash/api/mcp
codex mcp login emdash-site

ChatGPTのデスクトップアプリ、Codex CLI、IDE拡張機能は、同じCodexのホストに対するMCPの設定を共有します。設定ファイル、OAuth、対応している通信方式については、Codexの公式MCPドキュメントを参照してください。

サイトのコンテンツの操作

接続すると、次の操作をAIアシスタントに自然な言葉で依頼できます。ツールの名前を知っている必要はありません。やりたいことを説明するだけです。

コンテンツ

  • コンテンツの閲覧:「最新のブログ記事を10件表示して」「下書きのページをすべて探して」
  • コンテンツの読み込み:「'hello-world' という投稿を取得して要約して」
  • コンテンツの作成:「夏のセールについての新しいブログ記事を書いて」「Aboutセクション用のページを下書きで作成して」
  • コンテンツの編集:「料金ページを更新して新しいプランについて書いて」「FAQの投稿の誤字を直して」
  • 公開と予約公開:「夏のセールの投稿を公開して」「お知らせを6月1日の午前9時に予約公開して」「ローンチの投稿の予約を取り消して」
  • 版の比較:「トップページが前回公開されてから何が変わったか見せて」
  • 下書きの管理:「aboutページの下書きの変更を破棄して」「ニュースレターのテンプレートを複製して」
  • 翻訳:「welcomeの投稿にはどの翻訳がある?」「この英語の投稿に結び付いたフランス語の下書きを作って」(i18nが有効な場合)

バイライン

  • バイラインの閲覧:「名前に 'Lee' を含むゲスト寄稿者を一覧にして」
  • コンテンツへのクレジット:「この投稿の主なバイラインにPriya Shahを追加して」
  • バイラインの管理:「Sam Riveraのゲスト用バイラインを作って」「この寄稿者の紹介文を更新して」
  • バイラインの翻訳:「このバイラインのロケール別の版を見せて」

バイラインの作成、更新、削除、翻訳には、編集者のロールが必要です。コンテンツを書き込むツールは、呼び出し元にそのコンテンツを作成または編集する権限があれば、既存のバイラインのIDを受け付けます。

メディア

  • メディアの閲覧:「アップロード済みの画像をすべて一覧にして」「メディアライブラリにあるPDFを見せて」
  • 詳細の確認:「このメディアの詳細を取得して」
  • ファイルのアップロード:「このbase64の画像を banner.png としてアップロードして」「この公開URLにある画像をインポートして」
  • ストレージにある既存のオブジェクトの登録:「media/2026/banner.png をメディアとして登録して」
  • メタデータの更新:「ヒーロー画像の代替テキストを 'Mountain sunset' にして」
  • ファイルの削除:「古いバナー画像を削除して」

media_upload は、base64でエンコードしたバイト列か、公開されているHTTPまたはHTTPSのURLのどちらかを受け付けます。ファイルを保存し、メディアを登録して、IDとURLを返します。media_create は、すでにストレージにあるファイルのメタデータを登録するだけです。URLからのインポートは、プライベートネットワークの宛先を拒否し、リダイレクトも改めて確認します。どちらの方法でも、サイトのMIMEタイプとアップロードサイズの制限が適用されます。

寄稿者は media_upload を使えます。media_create でストレージにある既存のオブジェクトを登録するには、投稿者以上のロールが必要です。

  • コンテンツを探す:「'accessibility' に触れている投稿を検索して」「すべてのコレクションからTypeScriptに関するものを探して」

タクソノミー

  • 閲覧:「カテゴリーをすべて一覧にして」「タグを見せて」
  • タームの作成:「'tutorials' というタグを追加して」「'Engineering' の下に 'Frontend' というサブカテゴリーを作って」
  • タームの名前の変更:「'frontend' カテゴリーの名前を 'Web Frontend' に変えて」
  • タームの移動:「'tutorials' タグを 'guides' カテゴリーの下に移して」「'react' を親から外して」
  • タームの削除:「使っていない 'archive' タグを削除して」
  • メニューの表示:「メインのナビゲーションメニューを見せて」「フッターのメニューには何が入っている?」
  • メニューの作成:「'sidebar' という新しいメニューを作って」
  • メニューの編集:「'main' メニューの名前を 'Primary navigation' に変えて」
  • 項目の設定:「メインメニューの項目を、Home、Blog、About、Contactに置き換えて」
  • メニューの削除:「使っていない 'mobile' メニューを削除して」

サイト設定

  • 確認:「今のサイトタイトルは?」「ソーシャルのリンクを見せて」
  • 基本情報の更新:「サイトタイトルを 'Acme Blog' に、キャッチフレーズを 'Stories from the team' にして」
  • ロゴ/ファビコンの設定:「この画像をサイトのロゴにして」(media_upload でアップロードしたあと)
  • SEOの既定値:「既定のOG画像を新しいバナーにして」「タイトルの区切り文字を縦棒にして」
  • ソーシャルのハンドル:「ソーシャルの設定にGitHubとYouTubeのリンクを追加して」

スキーマ(管理者のみ)

  • 確認:「どんなコレクションがある?」「postsコレクションのフィールドを見せて」
  • コレクションの作成:「nameとquoteのフィールドを持つ 'testimonials' という新しいコレクションを作って」
  • スキーマの変更:「postsに 'featured' という真偽値のフィールドを追加して」

リビジョン

  • 履歴の表示:「この投稿のリビジョンの履歴を見せて」
  • 復元:「この投稿を1つ前の版に戻して」
本サイトの補足 やさしい解説

AIに依頼する内容は、管理画面でできる操作とほぼ同じです。記事の下書き作成や予約公開、画像のアップロード、カテゴリーやメニューの整理などを、文章でお願いできます。ただし、AIができることは、接続したユーザーのロールで決まります。たとえば寄稿者として接続したAIは公開できず、スキーマ(コレクションやフィールドの構造)を変えられるのは管理者として接続した場合だけです。

権限

MCPクライアントがOAuthの同意画面を開くと、クライアントが要求したすべての権限が、初期状態で選択されています。アクセスを承認する前に、クライアントに不要な権限の選択を外します。発行されるトークンは、選択したままの権限と、EmDashのロールで許可されている権限の範囲に制限されます。そのため、許可する権限を減らしても、クライアントにできることが増えることはありません。

ロール AIにできること
管理者 スキーマの変更とサイト設定の更新を含む、すべての操作
編集者 すべてのコンテンツ、メディア、バイライン、タクソノミー、メニューの管理。スキーマの表示と設定の読み込み。
投稿者 コンテンツの作成。自分のコンテンツの編集と公開。メディアのアップロードと、自分のメディアの管理。
寄稿者 公開せずに、下書きのコンテンツを作成し、メディアをアップロードする。

トークンのスコープとユーザーのロールのどちらかが足りない場合、EmDashはツールの呼び出しを拒否します。クライアントがそのエラーを説明することはありますが、制限を実際に適用するのは、あくまでEmDashです。

本サイトの補足 やさしい解説

接続するときに表示される同意画面では、AIが要求した権限が最初からすべて選ばれています。「記事の下書きを作らせたいだけ」なら、それ以外の権限の選択を外してから承認します。AIが実際にできることは、「同意画面で残した権限」と「自分のロールでできること」の両方を満たす範囲だけです。

ヒント

  • コレクションを具体的に指定する:複数のコレクションがある場合は、「投稿を作って」ではなく「ブログ記事を作って」のように伝えます。
  • 先にスキーマを尋ねる:コレクションにどんなフィールドがあるか分からない場合は、コンテンツを作成・編集する前に「postsコレクションにはどんなフィールドがある?」と尋ねます。
  • 公開する前に確認する:AIにはコンテンツを下書きとして作らせ、管理画面で内容を確認してから、AIに公開を依頼するか、自分で公開します。
  • 確認には比較を使う:公開する前に「この投稿の公開中の版と下書きの版を比較して」と依頼すると、何が変わるかを正確に確認できます。
  • リッチテキストのフィールドはPortable Textを使う:AIはリッチテキストのフィールドの内容を書けますが、複雑な書式は管理画面のエディターで整えるのが最適です。

開発者向けの情報

MCPサーバーのエンドポイント、認証の方法、OAuthのディスカバリー、ツールのパラメーター、エラーの扱いは、MCPサーバーリファレンスで説明しています。