# CodexとCMSをMCPで接続し、記事を公開する方法

公開日: 2026-11-02 | 更新日: 2026-11-02 | URL: https://blog.genko.me/codex-mcp-cms

> CodexはMCP経由でCMSの下書き作成と公開を行えます。genko.meを例に、TOML設定、OAuthログイン、差分レビュー、人の承認後に公開する手順を解説します。

CodexからCMSの記事を作成・公開するには、MCPサーバーを設定し、OAuthでログインします。genko.meでは接続先が`https://genko.me/mcp`、下書き作成が`create_draft`、公開が`publish_entry`です。下書きを保存し、人が内容と対象を確認してから公開を依頼します。

## CodexのMCP設定を追加する

Codex CLIを利用でき、genko.meで対象ワークスペースに所属していることを前提にします。[OpenAI公式MCPドキュメント](https://learn.chatgpt.com/docs/extend/mcp)では、CodexのStreamable HTTP接続とOAuth認証、ユーザー設定の`~/.codex/config.toml`を案内しています。[genko.meのMCP仕様](https://docs.genko.me/ai/mcp)に従い、このファイルへ次を追加します。既存の設定全体を置き換えないでください。

```toml
[mcp_servers.genko-me]
url = "https://genko.me/mcp"
```

同じ名前のテーブルがある場合は、その設定を編集します。genko.meの旧名`genko.me`、`genko`、`genko-docs`で登録していた場合は、旧登録を整理して二重接続を避けます。旧URLの`https://docs.genko.me/mcp`は廃止されています。

CLIで登録する場合は次の形でも設定できます。手動編集と両方行う必要はありません。なお、genko.meのCLI(`npx @genko-me/cli@latest mcp --codex`)でも同じ設定を追加でき、旧名の設定は置き換えられます。

```bash
codex mcp add genko-me --url https://genko.me/mcp
```

ここで登録するのは配信APIのURLではなくMCPのURLです。

## 初回ログインと読み取り確認

OpenAI公式のOAuthログイン手順に従い、次を実行します。

```bash
codex mcp login genko-me
```

genko.meのログイン・許可画面でアカウントと要求権限を確認します。続いてCodexの接続を再読み込みし、対話画面の`/mcp`でツールを確認します。まずは「genko.meのAPIキー管理方法を`search_docs`で検索し、該当ページを`get_doc`で取得してください。コンテンツは変更しないでください」と依頼します。

ツールが見えない場合は、設定先、再読み込み、URL末尾の`/mcp`を確認します。ドキュメント取得が成功しても、記事を更新・公開できる証明にはなりません。genko.meでは読み取りにワークスペースへの所属、更新に編集者以上のロールと`mcp:write`、公開・予約にさらに`mcp:publish`が必要です。権限不足ならロールとOAuthの許可を確認し、追加権限が必要な場合は認証をやり直します。

## 下書きから公開までを分けて進める

以下は操作例です。`your-workspace`やAPI名、記事IDは実際の応答で確認した値に置き換えます。プロンプト内の禁止事項は運用上の指示です。権限設定の代わりにはなりません。

### 1. 対象とフィールドを確認する

最初に次のように依頼します。

```text
list_workspacesで所属先と役割を確認してください。
your-workspaceのlist_apisでAPIとフィールド定義を取得し、
記事を保存するAPI、必須項目、言語設定を提示してください。
この段階では読み取りだけにしてください。
```

API名や本文フィールドIDを推測して保存しないことが重要です。`list_apis`はAPI・フィールド定義とワークスペースの言語、各APIの多言語設定を返します。既存記事を参考にする場合は、`list_entries`で対象を探し、`get_entry`で内容を取得します。

### 2. 原稿を確認してから下書き保存する

まず会話内にタイトル、本文、根拠リンクを出してもらい、直したい点を反映します。その後で保存を依頼します。

```text
確認済みのAPIとフィールド定義に合わせて、原稿をcreate_draftで
下書き保存してください。公開・予約はしないでください。
返された記事IDを示し、get_entryで保存内容を読み直して、
タイトル・本文・言語・公開状態を報告してください。
```

`create_draft`の必須引数は`workspace`、`api`、`values`です。次は、`title`だけで保存できるスキーマを仮定した最小の引数例です。実際の記事では、取得したフィールド定義とツールの入力仕様に合わせて本文と必須項目を追加します。

```json
{
  "workspace": "your-workspace",
  "api": "blog",
  "values": { "title": "記事タイトルの例" }
}
```

新規記事には`create_draft`、修正には`update_draft`を使います。公開中の記事を`update_draft`で直すと、指定フィールドが未公開の変更として保存され、サイトと通常の配信APIは公開中の内容を表示し続けます。これは[genko.me公式仕様](https://docs.genko.me/ai/mcp)で説明されている挙動です。

### 3. 人が差分をレビューする

公開中の記事に未公開の変更がある場合、`get_entry`の`hasPendingChanges`が`true`になります。`values`と`markdown`が未公開内容、`published.values`と`published.markdown`が公開中の内容です。この2つを比較するように依頼します。新規記事には公開版がないため、確認済み原稿と保存後の値を比べます。

| 確認項目 | 人が確認する内容 |
| --- | --- |
| 操作対象 | ワークスペース、API、記事ID、言語が意図どおりか |
| 本文 | 数字、仕様、引用元、削除された段落に誤りがないか |
| 表示 | 見出し、リンク先、コード、画像と代替テキストが適切か |
| 他のフィールド | タイトル、参照、カテゴリなどに意図しない変更がないか |
| 公開範囲 | 新規公開か、既存記事の差し替えか |

管理画面とサイト側のプレビューでも表示を確認します。エージェントの「修正しました」という要約だけで判断せず、保存済みの本文とフィールドを読みます。レビュー後に誰かが編集した場合は、公開前に再取得して承認した内容と一致するか確認します。

### 4. 承認した記事だけを公開する

対象と差分を確認した後で、別の指示を出します。

```text
レビューしたworkspace、api、記事ID、対象言語を再提示し、
get_entryで内容が承認時と変わっていないことを確認してください。
一致する場合だけ、その記事をpublish_entryで公開してください。
ほかの記事の公開・予約・削除はしないでください。
```

`publish_entry`は下書き・公開予定の版を即時公開し、公開中の記事なら未公開の変更を公開します。予約公開と即時公開を取り違えないようにします。公開後は`get_entry`の状態に加え、実際のサイトにも意図した内容が反映されたか確認してください。CMS側の公開成功と、サイト側の表示確認は分けて扱います。

公開中の記事の未公開変更を取り消す場合は`discard_changes`を使います。公開済み内容を過去へ戻す操作とは異なります。多言語APIでは`list_apis`で言語を確認し、対象ツールの`lang`を指定します。省略時はメイン言語を操作するため、言語も公開対象に含めて承認します。

## ClaudeなどのMCPクライアントでも使えるか

genko.meのサーバーはCodex専用ではありません。OAuth対応のStreamable HTTP MCPクライアントから同じURLへ接続できます。ただし設定ファイルとキーはクライアントごとに異なり、CodexのTOMLをそのままコピーするものではありません。

Claudeでの接続は[ClaudeからMCPでCMSを操作する方法](https://blog.genko.me/claude-mcp-cms)、Claude CodeとCodexからCMSへ連携する実装は[AIエージェントでCMS連携を実装する：Claude CodeとCodex](https://blog.genko.me/ai-agent-cms-integration)を参照してください。ここではCodexの設定と公開前レビューに絞っています。

## 公式MCPサーバーがあるほかのCMS

既存CMSが要件に合うなら、MCPのためだけに移行する必要はありません。

| CMS | 公式ドキュメントで確認できる操作 | 選ぶ場面 |
| --- | --- | --- |
| [Contentful](https://www.contentful.com/developers/docs/tools/mcp-server.md) | 記事の読み書き・公開、コンテンツモデル管理。リモート版はOAuthと環境別の許可設定を使用 | 既存のContentfulスペース・環境で運用を続けたい場合 |
| [Sanity](https://www.sanity.io/docs/ai/mcp-server) | GROQクエリ、文書の作成・変更・公開、スキーマの参照 | 既存のSanityスキーマとGROQを使う開発作業も行いたい場合 |

Contentfulのリモート版は対象スペース・環境へのMCPアプリの導入が必要です。SanityはOAuthを標準とし、APIトークン認証も案内しています。ツールや入力形式、権限は製品ごとに異なるため、genko.meの引数例を流用しないでください。

## よくある質問

### CodexからCMSの記事を直接公開できますか？

公開ツールを提供するMCPサーバーと必要な権限があれば可能です。genko.meでは`publish_entry`を使います。下書き保存と公開を別の依頼にして、人が対象と内容を確認します。

### genko.meのAPIキーをCodexの設定に書きますか？

この記事の接続方法ではOAuthでログインします。TOMLにはMCPのURLを設定し、配信APIキーを埋め込む手順ではありません。

### 公開中の記事を更新すると、すぐサイトに出ますか？

genko.meの`update_draft`は未公開の変更として保存します。`publish_entry`を呼ぶまで公開中の内容は変わりません。公開前には公開版との差分を確認してください。

### Claudeで使うMCPサーバーをCodexにも使えますか？

genko.meでは同じMCPサーバーを使えます。クライアントがOAuthとStreamable HTTPに対応している必要があり、設定方法はクライアント別に確認します。
