CDP MCP Server
CDP MCP Server
Acquia Customer Data Platform をLLMで利用可能にするMCP(Model Context Protocol)サーバーです。Claude、Copilot、またはMCP対応クライアントをこのサーバーに接続することで、テナントの読み取り、キャンペーンの実行、ワークフローの操作、レポートのクエリなど、面倒な管理作業を自動化できます。
深夜2時にCDPの画面をポチポチクリックするのが楽しいはずがない、という理由で構築されました。
提供機能
約300のツール: 権限、データウェアハウス、キャンペーン、設定、コネクタ、レポート、予測、メーラー、メール配信可能ページ、セキュリティ、キャッシュ、ステータスAPIを網羅しています。全カタログは
SUPPORTED_TOOLS.mdを参照してください。8つのプレイブックリソース: LLMに実際のマルチステップフロー(キャンペーンウィザード、C360プロファイルレンダリング、ワークフロー作成、コネクタオンボーディング、UDMPスキーマ編集など)の順序を教えます。これらはVegaおよびConfig UIをリバースエンジニアリングして作成されたため、モデルが推測で動くことを防ぎます。
2つの認証モード: OAuth2パスワードグラント(自動更新、401リトライ、ロックシリアライズ対応)または、既存の静的ベアラートークンを使用可能。
Dev / QA / Prod:
CDP_ENVIRONMENT変数で切り替え可能。Stdioトランスポート: Claude Desktop、VS Code Copilot、Continue、mcphost、Open WebUI(supergateway経由)、MCP Inspectorでそのまま利用可能。
上記が専門用語に聞こえる場合は、TUTORIAL.md をざっと読んでください。コピー&ペースト可能なコマンドで各要素を解説しています。ツール名と各機能の全リストについては、SUPPORTED_TOOLS.md を参照してください。
クイックスタート
# 1. Clone and install
git clone https://github.com/atharva-joshi77/cdp-mcp.git
cd cdp-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
# 2. Configure
cp .env.example .env
# edit .env: CDP_ENVIRONMENT, CDP_TENANT_ID, and either
# CDP_CLIENT_ID/SECRET + CDP_USERNAME/PASSWORD (OAuth2)
# or CDP_AUTH_TOKEN (static token)
# 3. Run
cdp-mcpcdp-mcp はstdioでJSON-RPCを話すため、単体で実行するとハングアップしているように見えますが、これは正常です。MCPクライアント(下記参照)に接続すると動作を開始します。
Claude Desktopへの接続
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"cdp": {
"command": "/absolute/path/to/cdp-mcp/.venv/bin/cdp-mcp",
"env": {
"CDP_ENVIRONMENT": "dev",
"CDP_TENANT_ID": "12345",
"CDP_CLIENT_ID": "...",
"CDP_CLIENT_SECRET": "...",
"CDP_USERNAME": "...",
"CDP_PASSWORD": "..."
}
}
}
}Claudeを再起動すると、ツールピッカーに約300個の cdp_* ツールが表示されるはずです。VS Code、Continue、Ollama/Open WebUI、MCP Inspectorの設定については、TUTORIAL.md §5 に完全なレシピがあります。
要件
項目 | 最小要件 |
Python | 3.11+ |
pip | 23.0+ |
API認証情報を持つCDPテナント | 必要(申し訳ありません) |
依存関係(自動的にインストールされます):
mcp>=1.13.0— FastMCPフレームワークhttpx>=0.27.0— 非同期HTTPpydantic+pydantic-settings— 設定 + バリデーションpython-dotenv—.envの読み込み
プロジェクト構成
src/cdp_mcp/
├── __main__.py # entry point: `cdp-mcp` / `python -m cdp_mcp`
├── server.py # FastMCP server, registers tools + resources
├── config.py # env/.env loader
├── auth/ # OAuth2 + static-token provider
├── utils/ # shared httpx client, error helpers
├── resources/ # MCP resource URIs (tenant/*, docs/*)
├── docs/ # the eight playbooks, shipped as resources
├── types/ # pydantic request/response models
└── tools/ # one subpackage per CDP service area
├── permissions/ users, roles, clients
├── dw/ data warehouse, A360, audiences, offers, trackers
├── campaign/ defs, audiences, messages, dispatches, runs, exports
├── config_api/ tenants, workflows, schedules, UDMP, DQE, clusters…
├── connectors/ input + output connectors, templates
├── reports/ dashboards, widgets, cubes, QL
├── predictions/ prediction defs + content templates
├── mailer/ accounts, subusers, identifiers, batches
├── emailable_pages/ emailable-pages CRUD
├── security/ token, auth, SSO, password reset
├── cache/ cache ops
├── spam/ spam score
├── status/ status + orchestration/purge status
├── provisions/ self-service provisioning
├── global_actions/ platform-wide actions
└── alerts/ stub (real Alerts API lives in a different stack)すべてのツールは、プールされたhttpx接続、共有認証トークンキャッシュ、更新時の asyncio.Lock、1回限りの401リトライ、URLエンコードされたテナントID、logger.info によるリクエスト/レスポンス追跡を備えた単一の HttpClient を共有しています。何かがおかしいと感じた場合、ログが真実を語ります。
プレイブック(秘密のソース)
ツールリストだけでは不十分です。CDPのフローの多くは「定義をPOSTし、次に ?action=publish をPOSTし、ステータスをGETし、場合によっては別のスケジュールIDで ?action=schedule をPOSTする」といった手順が必要です。LLMに任せると、これらを誤ることがよくあります。
そのため、このサーバーは8つのMarkdownプレイブックをMCPリソースとして提供します:
リソース | 内容 |
| Vegaキャンペーンウィザードのライフサイクル全体、folderIdルール、バッチ対トリガー公開、datasetDefコピー復旧、データエクスポートの保存→実行、非同期オーディエンスサイズ計算 |
| スケジュールCRUD、コネクタ/レポート/エクスポート/キャンペーン実行、sQueryDef検証→保存、プロビジョナー、コンパクション、削除前のドレイン |
| 3並列フェッチによるプロファイル読み込み、レイアウトのディープマージ、リアルタイムポーリング、 |
| DQEバッチ書き込み、A360の3フェーズ保存、ステータスページのジョブ制御、GDPR管理オーバーライド |
| 配列ラップPOST、キューブメタデータウォーク、アドホック対キャッシュ実行、二重鮮度チェック |
| シンボリックworkflowId対数値workflowDBId、グラフ読み込み、ステップ+エッジバッチ処理、動詞分類 |
| 入力/出力コネクタの分割、4〜5ステップのウィザード、 |
| ネスト読み込み/フラット書き込みの形状、カスケード、公開順序、カスタム属性ホワイトリスト |
MCPクライアントは接続時にこれらを自動検出し、サーバーの instructions ブロックがモデルを各リソースに誘導します。
認証に関する注意点
OAuth2 (推奨): プロバイダーはヘッダーに認証情報を含めて
POST {baseUrl}/token?action=createを実行し、トークンをメモリにキャッシュし、同時更新をasyncio.Lockでシリアライズし、有効期限の約60秒前に更新します。ダウンストリーム呼び出しからの401は、1回限りの強制更新とリトライをトリガーします。静的トークン:
CDP_AUTH_TOKENを設定すると、OAuth2パスは完全にスキップされます。ローテーションはご自身で管理してください。
本物のシークレットをこのリポジトリに入れないでください。.env はgitignoredされています。
開発
# smoke test: should print the server's capabilities + tool list
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' | cdp-mcp
# interactive tool browser
npx @modelcontextprotocol/inspector cdp-mcp
# verify tool count
python3 -c "from cdp_mcp.server import create_server; import asyncio; \
print(len(asyncio.run(create_server().list_tools())))"より詳細なトラブルシューティングマトリックス(サーバーが起動しない、401エラー、クライアントが接続できないなど)は TUTORIAL.md §9 にあります。
ステータス
ツール数: 12のCDPサービス全体で 301
プレイブックリソース: 8
アラートツールは意図的にスタブ化されています。実際のアラートAPIは別のMuleSoft/Goスタック上にあり、独自のベースURLと認証が必要です(PR歓迎)
統合テストハーネスは開発中です(足場は存在し、完全なコントラクトカバレッジはフォローアップとして追跡されています)
貢献
フォーク、ブランチ作成、ハック。
./gradlew-equivalentを実行(pip install -e .と上記のスモークテストで十分です)。ツールを追加する場合は、対応する
tools/<area>/__init__.pyレジストラに登録してください。マルチステップフローを追加する場合は、
src/cdp_mcp/docs/にプレイブックを作成し、resources/resource_providers.pyでリソースを登録してください。PRを開いてください。説明は丁寧に書いてください。
ライセンス
内部/プロプライエタリ — 自社テナント以外で使用する前にAcquiaに確認してください。
httpx、pydantic、そして不安定なCDPウィザードへの執念を等分に混ぜて構築されました。
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/atharva-joshi77/cdp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server