MCPサーバーリファレンス

このページ

EmDashには/_emdash/api/mcpに組み込みのModel Context Protocol(MCP)サーバーが含まれており、コンテンツ管理操作をAIアシスタントのツールとして公開します。

このページではプロトコルの詳細を説明します:認証、トランスポート、ツール仕様、OAuthディスカバリ、エラー処理。

認証

MCPサーバーは3つの認証方法をサポートしています:

方法仕組み
OAuth 2.1 Authorization Code + PKCEMCPクライアント向けの標準フロー。ユーザーがブラウザでスコープを承認します。
Personal Access Token(PAT)管理パネルで作成される長期有効なec_pat_*トークン。
Device Flowブラウザでコードを承認するCLIスタイルのフロー。emdash loginで使用されます。

スコープ

スコープアクセス権限
content:readコンテンツの一覧、取得、比較、検索。タクソノミー、タームおよびメニューの一覧。
content:writeコンテンツの作成、更新、削除、公開、非公開化、スケジュール、スケジュール解除、複製、復元。taxonomies:managemenus:manageを暗黙的に付与。
media:readメディアアイテムの一覧と取得。
media:writeメディアメタデータの登録(作成)、更新、削除。
schema:readコレクション一覧とスキーマの取得。
schema:writeコレクションとフィールドの作成・削除。
taxonomies:manageタクソノミータームの作成、更新、削除。
menus:manageナビゲーションメニューとそのアイテムの作成、更新、削除。
settings:readサイト全体の設定の読み取り。
settings:manageサイト全体の設定の更新。
mcp:tools任意のプラグインの明示的に有効化されたMCPツールの呼び出し。
mcp:tools:<pluginId>特定のプラグインの明示的に有効化されたMCPツールの呼び出し。
adminすべての操作への完全アクセス。

ロール要件

操作最小ロール
コンテンツ読み取りSubscriber(10)公開済みアイテム; Contributor(20)下書き、スケジュール済み、ゴミ箱、リビジョン
コンテンツ作成Contributor(20)
自身の編集/削除Author(30)
コンテンツ公開Author(30)自身; Editor(40)他者のアイテム
スキーマ読み取りEditor(40)
スキーマ書き込みAdmin(50)
タクソノミー管理Editor(40)
メニュー管理Editor(40)
設定読み取りEditor(40)
設定管理Admin(50)
メディアアップロード(media_uploadContributor(20)
メディア登録(media_createAuthor(30)
メディア使用修復Admin(50)

認証ガイドでロール定義を参照してください。

トランスポート

サーバーはステートレスモードでStreamable HTTPトランスポートを使用します。各リクエストは独立しています。

  • POST /_emdash/api/mcp — JSON-RPCツールコールの送信
  • GET /_emdash/api/mcp — 405を返す
  • DELETE /_emdash/api/mcp — 405を返す

ツール

サーバーは8つのドメインにわたるツールを公開します:コンテンツ、スキーマ、メディア、検索、タクソノミー、メニュー、リビジョン、設定。

コンテンツツール

content_list

コレクション内のコンテンツアイテムをフィルタリングとページネーション付きで一覧表示。

パラメータ必須説明
collectionstringはいコレクションスラッグ
statusstringいいえフィルタ:draftpublishedscheduled
limitintegerいいえ最大アイテム数(1-100、デフォルト50)
cursorstringいいえページネーションカーソル
orderBystringいいえソートフィールド
orderstringいいえソート方向:ascまたはdesc
localestringいいえロケールでフィルタ

スコープ: content:read | 読み取り専用: はい

content_get

IDまたはスラッグで単一のコンテンツアイテムを取得。

パラメータ必須説明
collectionstringはいコレクションスラッグ
idstringはいアイテムID(ULID)またはスラッグ
localestringいいえスラッグ検索用のロケール

スコープ: content:read | 読み取り専用: はい

content_create

新しいコンテンツアイテムを作成。

パラメータ必須説明
collectionstringはいコレクションスラッグ
dataobjectはいフィールド値(キーバリューペア)
slugstringいいえURLスラッグ
statusstringいいえ初期ステータス:draftまたはpublished
localestringいいえロケール
translationOfstringいいえ翻訳元のアイテムID

スコープ: content:write

content_update

既存のコンテンツアイテムを更新。変更したいフィールドのみ含めます。

パラメータ必須説明
collectionstringはいコレクションスラッグ
idstringはいアイテムIDまたはスラッグ
dataobjectいいえ更新するフィールド値
slugstringいいえ新しいURLスラッグ
statusstringいいえ新しいステータス
_revstringいいえ競合検出用リビジョントークン

スコープ: content:write

content_delete

コンテンツアイテムをゴミ箱に移動して論理削除。

パラメータ必須説明
collectionstringはいコレクションスラッグ
idstringはいアイテムIDまたはスラッグ

スコープ: content:write | 破壊的: はい

content_restore

ゴミ箱からコンテンツアイテムを復元。

スコープ: content:write

content_permanent_delete

ゴミ箱のアイテムを完全かつ不可逆的に削除。

スコープ: content:write | 破壊的: はい

content_publish

コンテンツアイテムを公開し、サイトでライブにします。

スコープ: content:write

content_unpublish

公開済みアイテムを下書きステータスに戻します。

スコープ: content:write

content_schedule

コンテンツアイテムを将来の公開にスケジュール。

パラメータ必須説明
collectionstringはいコレクションスラッグ
idstringはいアイテムIDまたはスラッグ
scheduledAtstringはいISO 8601日時

スコープ: content:write

content_unschedule

スケジュール済みの公開をキャンセル。

スコープ: content:write

content_compare

公開バージョンと現在の下書きを比較。

スコープ: content:read | 読み取り専用: はい

content_discard_draft

現在の下書きを破棄し、最後の公開バージョンに戻す。

スコープ: content:write | 破壊的: はい

content_list_trashed

コレクションのゴミ箱内のアイテムを一覧表示。

スコープ: content:read | 読み取り専用: はい

content_duplicate

既存のコンテンツアイテムのコピーを作成。

スコープ: content:write

content_translations

コンテンツアイテムのすべてのロケールバリアントを取得。

スコープ: content:read | 読み取り専用: はい

スキーマツール

schema_list_collections

すべてのコンテンツコレクションを一覧表示。

スコープ: schema:read | 最小ロール: Editor | 読み取り専用: はい

schema_get_collection

コレクションの詳細情報を取得。

スコープ: schema:read | 最小ロール: Editor | 読み取り専用: はい

schema_create_collection

新しいコンテンツコレクションを作成。

スコープ: schema:write | 最小ロール: Admin

schema_delete_collection

コレクションとそのテーブルを削除。不可逆。

スコープ: schema:write | 最小ロール: Admin | 破壊的: はい

schema_create_field

コレクションに新しいフィールドを追加。

フィールドタイプ:stringtextnumberintegerbooleandatetimeselectmultiSelectportableTextimagefilereferencejsonslug

スコープ: schema:write | 最小ロール: Admin

schema_delete_field

コレクションからフィールドを削除。不可逆。

スコープ: schema:write | 最小ロール: Admin | 破壊的: はい

メディアツール

media_list

アップロード済みメディアファイルを一覧表示。

スコープ: media:read | 読み取り専用: はい

media_upload

base64エンコードデータまたは外部URLからメディアファイルをアップロード。

スコープ: media:write | 最小ロール: Contributor

media_create

すでにストレージにアップロード済みのメディアファイルを登録。

スコープ: media:write | 最小ロール: Author

media_get

IDでメディアファイルの詳細を取得。

スコープ: media:read | 読み取り専用: はい

media_update

メディアファイルのメタデータを更新。

スコープ: media:write

media_delete

メディアファイルを完全に削除。

スコープ: media:write | 破壊的: はい

media_usage_repair

コンテンツのメディア使用インデックスを修復。

スコープ: admin | 最小ロール: Admin

検索ツール

コンテンツコレクション全体のフルテキスト検索。

パラメータ必須説明
querystringはい検索クエリテキスト
collectionsstring[]いいえ特定のコレクションに限定
localestringいいえロケールでフィルタ
limitintegerいいえ最大結果数(1-50、デフォルト20)

スコープ: content:read | 読み取り専用: はい

タクソノミーツール

taxonomy_list

すべてのタクソノミー定義を一覧表示。

スコープ: content:read | 読み取り専用: はい

taxonomy_list_terms

タクソノミー内のタームを一覧表示。

スコープ: content:read | 読み取り専用: はい

taxonomy_create_term

新しいタームを作成。

スコープ: taxonomies:manage | 最小ロール: Editor

taxonomy_update_term

既存のタームを更新。

スコープ: taxonomies:manage | 最小ロール: Editor

taxonomy_delete_term

タームを完全に削除。

スコープ: taxonomies:manage | 最小ロール: Editor | 破壊的: はい

メニューツール

ナビゲーションメニューを一覧表示。

スコープ: content:read | 読み取り専用: はい

名前でメニューを取得。

スコープ: content:read | 読み取り専用: はい

新しいナビゲーションメニューを作成。

スコープ: menus:manage | 最小ロール: Editor

メニューのラベルを更新。

スコープ: menus:manage | 最小ロール: Editor

メニューとそのすべてのアイテムを削除。不可逆。

スコープ: menus:manage | 最小ロール: Editor | 破壊的: はい

メニューのアイテムリスト全体を一度に置換。アトミック。

スコープ: menus:manage | 最小ロール: Editor

リビジョンツール

revision_list

コンテンツアイテムのリビジョン履歴を一覧表示。

スコープ: content:read | 読み取り専用: はい

revision_restore

コンテンツアイテムを以前のリビジョンに復元。

スコープ: content:write

設定ツール

settings_get

すべてのサイト全体の設定を取得。

スコープ: settings:read | 最小ロール: Editor | 読み取り専用: はい

settings_update

1つ以上のサイト全体の設定を更新。

スコープ: settings:manage | 最小ロール: Admin

OAuthディスカバリ

保護リソースメタデータ

GET /.well-known/oauth-protected-resource
{
  "resource": "https://example.com/_emdash/api/mcp",
  "authorization_servers": ["https://example.com/_emdash"],
  "scopes_supported": [
    "content:read", "content:write",
    "media:read", "media:write",
    "schema:read", "schema:write",
    "taxonomies:manage", "menus:manage",
    "settings:read", "settings:manage",
    "admin"
  ],
  "bearer_methods_supported": ["header"]
}

認可サーバーメタデータ

GET /.well-known/oauth-authorization-server/_emdash
{
  "issuer": "https://example.com/_emdash",
  "authorization_endpoint": "https://example.com/_emdash/oauth/authorize",
  "token_endpoint": "https://example.com/_emdash/api/oauth/token",
  "scopes_supported": ["content:read", "content:write", "..."],
  "response_types_supported": ["code"],
  "grant_types_supported": [
    "authorization_code",
    "refresh_token",
    "urn:ietf:params:oauth:grant-type:device_code"
  ],
  "code_challenge_methods_supported": ["S256"],
  "token_endpoint_auth_methods_supported": ["none"],
  "device_authorization_endpoint": "https://example.com/_emdash/api/oauth/device/code"
}

エラー処理

ツールエラーはisError: true付きのテキストコンテンツとして返されます:

{
  "content": [{ "type": "text", "text": "[NOT_FOUND] Collection 'nonexistent' not found" }],
  "isError": true,
  "_meta": { "code": "NOT_FOUND" }
}
{
  "content": [
    { "type": "text", "text": "[INSUFFICIENT_SCOPE] Insufficient scope: requires content:write" }
  ],
  "isError": true,
  "_meta": { "code": "INSUFFICIENT_SCOPE" }
}

トランスポートレベルのエラーはJSON-RPCエラーコード-32603(内部エラー)を返し、実装の詳細は公開しません。