- MCP(Model Context Protocol)でCodex CLIと外部ツールを標準化された方法で接続
- データベース・社内API・ドキュメント管理ツールとの連携パターンを実践解説
- カスタムMCPサーバーの構築手順でチーム独自のワークフローを実現
「Codex CLIから直接データベースを操作できたらいいのに」「社内のAPIドキュメントをAIが参照してくれたら開発がもっと速くなるのに」——そんな思いを抱えている開発者は多いでしょう。
結論から言えば、Model Context Protocol(MCP)を使えば、Codex CLIを外部ツール・サービスの統合ハブとして活用できます。 データベースのスキーマ情報取得、社内ドキュメントの参照、外部APIの呼び出しまで、AIエージェントが直接操作できるようになります。
この記事では、MCPの基本概念からCodex CLIでの具体的な設定方法、実践的な連携パターン、カスタムMCPサーバーの構築まで解説します。

Model Context Protocol(MCP)とは何か
MCPの設計思想 — AIと外部ツールの標準接続
MCP(Model Context Protocol)は、AIエージェントと外部ツールを接続するためのオープンスタンダードです。Anthropicが提唱し、現在はOpenAIを含む複数のAIツールベンダーが採用しています。
MCPの核心は「ツールディスカバリー」にあります。AIエージェントがMCPサーバーに接続すると、そのサーバーが提供する機能(ツール)の一覧とスキーマを自動的に取得し、必要に応じて呼び出します。開発者は個別のAPI連携コードを書く必要がありません。
MCP公式仕様では、以下の3つの主要コンポーネントが定義されています。
- Tools: エージェントが呼び出せる関数(データ取得、操作実行など)
- Resources: エージェントが参照できるデータソース(ファイル、ドキュメントなど)
- Prompts: 定型的な指示テンプレート
Codex CLI内蔵MCPクライアントの仕組み
Codex CLIはMCPクライアントを内蔵しており、設定ファイルにMCPサーバーの情報を記述するだけで外部ツールとの連携が有効になります。
Codex CLIの起動時にMCPサーバーへの接続が確立され、利用可能なツールがエージェントのツールリストに自動追加されます。以降、ユーザーの指示に応じてエージェントが適切なツールを選択・呼び出しします。
Codex CLIの基本については「Codex CLI使い方入門」で解説しています。
MCPサーバーのセットアップ手順
codex mcp add によるサーバー登録
最も簡単な方法は、Codex CLIのコマンドでMCPサーバーを登録することです。
# npmパッケージとして公開されているMCPサーバーを追加
codex mcp add postgres-mcp -- npx @mcp/postgres --connection-string "postgresql://localhost/mydb"
# Dockerコンテナとして動作するMCPサーバーを追加
codex mcp add github-mcp -- docker run -i --rm ghcr.io/mcp/github --token $GITHUB_TOKEN
登録されたMCPサーバーは、次回のCodex CLI起動時に自動的に接続されます。
config.tomlでの永続設定
プロジェクト単位でMCPサーバーを設定する場合は、codex.toml に記述します。
# codex.toml
[mcp.postgres]
command = "npx"
args = ["@mcp/postgres", "--connection-string", "postgresql://localhost/mydb"]
env = { PGPASSWORD = "from-env" }
[mcp.github]
command = "npx"
args = ["@mcp/github"]
env = { GITHUB_TOKEN = "from-env" }
設定の詳細は「Codex CLI設定ガイド」を参照してください。
実践パターン① — データベース連携(PostgreSQL・MongoDB)
スキーマ情報の自動取得
PostgreSQL MCPサーバーを接続すると、Codex CLIはデータベースのテーブル構造を自動的に把握します。
> このデータベースのusersテーブルの構造を教えてください
🔧 Using tool: postgres.describe_table(table="users")
usersテーブル:
- id: SERIAL PRIMARY KEY
- email: VARCHAR(255) UNIQUE NOT NULL
- name: VARCHAR(100) NOT NULL
- created_at: TIMESTAMP DEFAULT NOW()
- updated_at: TIMESTAMP DEFAULT NOW()
マイグレーション生成の自動化
スキーマ情報を踏まえた上で、自然言語からマイグレーションファイルを生成できます。
> usersテーブルにprofile_image_urlカラムを追加するマイグレーションを作成して
🔧 Using tool: postgres.describe_table(table="users")
📝 Creating migration file: migrations/20260314_add_profile_image_url.sql
生成されるSQLは実際のスキーマに基づいているため、型の不整合やカラム名の重複といったエラーが自動的に回避されます。
データベース関連の自動化は「Codex CLI データベースマイグレーション」でも詳しく解説しています。
実践パターン② — 社内API・ドキュメント連携
Confluence/Notionからコンテキスト注入
社内のドキュメント管理ツールをMCPサーバー経由で接続すれば、開発中にAPIドキュメントや設計書を参照できます。
codex mcp add notion-mcp -- npx @mcp/notion --api-key $NOTION_API_KEY
接続後のやり取り例:
> APIの認証仕様をNotionのドキュメントから確認して、ログイン機能を実装して
🔧 Using tool: notion.search(query="API認証仕様")
🔧 Using tool: notion.get_page(page_id="abc123")
📝 認証仕様を確認しました。JWT Bearer Token方式ですね。
📝 ログイン機能を実装します...
Swagger/OpenAPI定義の活用
REST APIのOpenAPI定義ファイルをMCPリソースとして公開すれば、エンドポイントの仕様に基づいたクライアントコード生成やテスト作成が可能です。
[mcp.openapi]
command = "npx"
args = ["@mcp/openapi", "--spec", "./api/openapi.yaml"]
API開発全般については「Codex CLI API開発ガイド」を参照してください。
カスタムMCPサーバーの構築(Node.js / Python)
ツールディスカバリーとスキーマ定義
独自のMCPサーバーを構築する場合、ツールのスキーマを定義する必要があります。
// Node.js版カスタムMCPサーバー
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({
name: 'my-company-tools',
version: '1.0.0',
});
// ツールの定義
server.tool(
'get_employee',
'社員情報を取得する',
{ employeeId: z.string().describe('社員ID') },
async ({ employeeId }) => {
const employee = await fetchEmployee(employeeId);
return { content: [{ type: 'text', text: JSON.stringify(employee) }] };
}
);
// サーバーの起動
const transport = new StdioServerTransport();
await server.connect(transport);
双方向データフローの実装
MCPサーバーはデータの取得だけでなく、外部システムへの書き込みも可能です。
server.tool(
'create_jira_ticket',
'JIRAチケットを作成する',
{
title: z.string().describe('チケットタイトル'),
description: z.string().describe('説明'),
priority: z.enum(['high', 'medium', 'low']).describe('優先度'),
},
async ({ title, description, priority }) => {
const ticket = await jiraClient.createIssue({ title, description, priority });
return { content: [{ type: 'text', text: `チケット作成完了: ${ticket.key}` }] };
}
);
セキュリティとアクセス制御
MCP連携ではセキュリティに特に注意が必要です。
必須の対策:
- MCPサーバーの認証情報は環境変数で管理(ハードコード厳禁)
- データベース接続は読み取り専用ユーザーを使用(書き込み権限は必要時のみ)
- MCPサーバーのログを有効化し、どのツールが呼び出されたか記録する
- 本番環境のデータベースには直接接続しない(ステージング環境を使用)
# セキュリティ設定の例
[mcp.postgres]
command = "npx"
args = ["@mcp/postgres", "--connection-string", "from-env:DATABASE_URL", "--read-only"]
セキュリティ全般は「Codex CLI セキュリティ管理」で解説しています。
ローカルモデル(Ollama)との併用テクニック
コスト削減やプライバシー保護の観点から、MCPサーバーの一部機能をローカルモデルで処理する手法も有効です。
# Ollamaでローカルモデルを起動
ollama serve
# Codex CLIの設定でローカルモデルをフォールバックに指定
codex config set fallback-model ollama/codellama
機密性の高い社内データを含むクエリはローカルモデルで処理し、一般的なコーディングタスクはクラウドのGPT-4oで処理するというハイブリッド構成が現実的です。
カスタムモデル設定は「Codex CLI カスタムモデルガイド」を参照してください。
まとめ — MCPで広がるCodex CLIの可能性
MCP連携により、Codex CLIは単なる「コード生成ツール」から**「開発環境全体を統合するAIハブ」**へと進化します。データベース・社内ドキュメント・外部API・タスク管理ツール——あらゆるシステムとAIが直接やり取りすることで、開発者は本質的な設計・判断に集中できるようになります。
今すぐ試せるアクション:
codex mcp addでPostgreSQLまたはGitHubのMCPサーバーを追加- データベースのスキーマ情報を使ったマイグレーション生成を体験
- チーム独自のカスタムMCPサーバーの構築を検討
- セキュリティポリシーを整備した上で本番ワークフローに組み込む
Codex CLI完全攻略シリーズの他のエピソードも読む →
シリーズ一覧を見る