CPQ-BML MCP Server
CPQ-BML VS Code 拡張機能
Oracle CPQ BigMachines Language (BML) のための、プロフェッショナルで多機能な Visual Studio Code 拡張機能です。この拡張機能は CPQ プロフェッショナル向けの究極の開発環境として、IntelliSense、シンタックスハイライト、堅牢な診断/リンティング、ワークスペース全体のフォーマット、リモート REST 統合、MCP による AI 支援を提供します。
📖 目次
Related MCP server: Salesforce CLI MCP Server
✨ 機能概要
🎨 BML カラーテーマ: 4つのカスタマイズされたエディタテーマを提供し、深いセマンティックトークンの配色を実現します。
💡 IntelliSense: コンテキストに応じた自動補完、シグネチャヘルプ、パラメータのツールチップを提供します。
🔍 リンターと診断: セキュリティ(SQL インジェクション、ハードコードされたシークレット)、Oracle 公式の BML ドキュメントで確認された確実なコンパイル/ランタイムエラー、非推奨 API、論理エラーに対する 70 以上のリアルタイムチェックを提供します。
📖 オフラインヘルプビューア: Docusaurus 風にレンダリングされたドキュメント(
:::note/:::warningのコールアウト付き)が、任意のホバーツールチップから即座に開きます。インターネット接続は不要です。🛠 ワークスペース全体のフォーマット: ディレクトリまたは対象フォルダを再帰的に整形します。
☁ REST 統合: リモートの CPQ インスタンス上で BML 関数の同期、コンパイル、検証、デバッグ、デプロイを直接行います。
🤖 AI エージェント接続 (MCP): 安全なローカル Model Context Protocol (MCP) サーバーを使用して、AI によるビルドやデバッグを実現します。
🧠 AI エージェントスキル (AgentSkills.io): Claude Code などの AI アシスタントに深い CPQ および BML のドメイン知識を注入するための、プリコンパイル済みのセマンティックスキルを 8 個同梱しています。
📝 Better Comments: タスク、タグ、ディレクティブ、関数ヘッダーに対して明確な視覚スタイルを提供します。
🔍 主要機能
1. 言語サポートと IntelliSense
リッチなシンタックスハイライト: BML メソッド、制御フロー文(
if、elif、else、for)、データベースクエリ(bmql)、演算子、リテラルに対する完全な文法サポートを提供します。スニペットライブラリ: ループ構造、一般的な文字列操作、JSON 操作、システム関数に対する、コンテキストに応じた即時のコードスケルトンを提供します。
オートコンプリートとツールチップ: 入力に応じてシグネチャ、戻り値の型、パラメータのチェックリストが表示され、Oracle CPQ の仕様に一致します。
オフラインヘルプビューア: 組み込み関数のすべてのホバーツールチップには、高速で自己完結型のドキュメントパネルを開く 📖 オフラインヘルプを読む リンクが含まれています。インターネット接続は不要です。Docusaurus スタイルの
:::note/:::tip/:::warningコールアウトを、生のマークダウンテキストではなく、適切な色付きボックスとしてレンダリングします。エディタのテーマに合わせられ、複数回開いても単一のパネルを再利用するため、毎回プレビューを再起動することなく、繰り返しの参照が即座に行えます。スペルチェッカー統合:
cspell.json定義を事前構成して、スペルエラーを発生させることなく、CPQ 固有の関数(strtojavadate、jsonarrayrefid、bmqlなど)を自動的にサポートします。
2. ワークスペースフォーマッタとビューティファイア
再帰的フォーマット:
CPQ-BML: Beautify / Format All BML Files in Workspace(cpqBml.beautifyWorkspace)を実行して、BML ファイルを再帰的にフォーマットします。フォルダターゲット UI: マルチセレクトのクイックピックピッカーがワークスペースのルートパスとフォルダを表示し、特定のモジュールを対象にできます。
CPQ の規約: インデント、スペース、ブレースのレイアウトを標準化し、キーワード
notをコンパイラ必須のNOTに自動置換するなどの大文字ルールを強制します。柔軟な構成: フォーマッタの動作は、ローカルの
.bmlbeautifyrcJSON ファイルを使用して特定のディレクトリごとに上書きできます。
3. BML リンターとリアルタイム診断
この拡張機能には、CPQ にアップロードする前に欠陥、アンチパターン、脆弱性を検出するためのカスタム BML ネイティブ静的アナライザが含まれています:
Linter ルールカテゴリ | 診断チェックと検証 | 推奨事項 / 修正 |
BMQL 安全性 |
| 安全な |
API 非推奨 |
|
|
Oracle 定数 | JS 固有の | CPQ 互換の |
return 文 | 欠落した return パス、または無効な Commerce BML return(区切り文字 | 有効な BML return 文と区切り文字パターンを強制します。 |
配列境界の安全性 | 先行する | インデックスアクセスの前に配列サイズの検証を強制します。 |
解析検証 | 変数に対する安全でない | 最初に |
保証されたコンパイル/実行時エラー | Oracle 自身の BML ドキュメントに対して検証された、データに関係なく 常に 失敗するパターン: | それぞれに 1 行の決定的な修正があります。これらはリテラル引数に対してのみ発火し、実行時に静的に知ることができない変数には決して発火しないため、構造上ゼロ誤検知です。 |
文書化された関数制限 |
| リテラル引数を調整して、その関数の文書化された動作の範囲内に収めます。 |
セキュリティとシークレット | 文字列リテラル内のハードコードされた URL。ハードコードされた資格情報 - | URL をデータテーブルまたはシステム変数に抽出し、シークレットをリテラルソースコードではなくシステム変数または安全な構成に保存します。 |
ロジックとスタイル | 空の制御フロー( | 定数に名前を付け、ブロックを正しくフォーマットすることを推奨します。 |
パフォーマンス | ネストされたループ、ループ内の BMQL クエリ、ループ内の文字列連結、同じテーブルに対する繰り返し/重複した BMQL クエリ。 | クエリをループの外に移動し、文字列累積には |
設計と複雑さ | ネスト深度 > 3、循環的複雑度 > 15(カウントされる分岐点: | 深くネストされたブロックをヘルパー関数にリファクタリングします。 |
スタイル | 1 行に複数のステートメント、開き/閉じ括弧の配置、引数を括弧で囲まない | 1 行 1 ステートメント、折りたたみ括弧スタイル、 |
安全性 | リテラル浮動小数点数との直接等価比較( | 浮動小数点比較には許容差しきい値を使用し、除算をガードし、誤って配置されたループ制御ステートメントを削除し、サポートされている CPQ 属性を使用します。 |
構文エラー | 配列要素の代入( | 配列には |
関数呼び出し | 不明な裸の関数名(「もしかして」のタイポ提案付き)、Oracle の組み込みシグネチャに対する誤った引数数、引数のリテラル型の不一致、不明なワークスペース | クイックフィックスを適用して関数名を修正し、期待される引数の数と型に一致させます。 |
デッドコードとロジック | 常に真/常に偽の条件、無条件の | デッドブランチを削除またはリファクタリングし、演算子の優先順位に明示的な括弧を追加し、 |
変数チェック | 型一貫性違反(競合するリテラル型で変数が再割り当て)、同じファイル内での代入前の変数読み取り( | 代入全体で一貫したリテラル型を確保し、使用前に変数を初期化し、読み取り専用のシステム変数に書き込まないでください。 |
インライン抑制
コメントを使用して、特定のリンタールールをきめ細かくバイパスできます。ディレクティブは大文字と小文字を区別せず、行コメントとブロックコメントの両方で機能します:
// bml-lint-disable-file ← suppress everything in this file
// bml-lint-disable ← start of suppressed block
// bml-lint-enable ← end of suppressed block
x = 10 / 0; // bml-lint-disable-line ← suppress diagnostics on this line
/* bml-lint-disable-next-line */ ← suppress all diagnostics on the next line
// bml-lint-disable-next-line bml-operator-fix, bml-spelling-error
x = 10 / 0; ← only those two codes are suppressedサポートされているディレクティブスタイル:
ディレクティブ | スコープ |
| 配置場所に関係なく、ファイル全体 |
| この位置から対応する |
| 以前の |
| コメントが置かれている行 |
| 直後の行 |
| 同じ行のブロックコメント |
| 対象の行の前にあるブロックコメント |
[!TIP] コードリストを省略するとすべての診断が抑制されます。1つ以上の
bml-*コードを指定すると、それらの特定のルールのみが抑制されます。多くの診断では、電球アイコンのクイックフィックス(Ctrl+.またはCmd+.)が利用可能で、セミコロンのスタイル、変数のタイプミス、フォーマットエラー、非推奨APIを即座に自動解決できます。
4. Better Comments とドキュメントヘッダー
コメントをカテゴリ別のタスク、ステータス、または視覚的なコールアウトとしてスタイル設定することで、コードの可読性を高めます。
カスタムタグのスタイリング
コメントプレフィックス | 色 / 視覚的表現 | 目的 / 意味 |
| 鮮やかな赤(高コントラスト) | 重大な警告、注意、またはセキュリティ通知 |
| ソフトブルー(斜体) | 質問、設計レビュー、または未解決のパス |
| 鮮やかな緑(斜体) | 強調されたメモ、重要なポイント、または重要な情報 |
| 控えめな取り消し線 | コメントアウトされたデッドコードブロック |
| 明るいオレンジ | 実装予定のタスク |
| 薄い赤(太字) | 修正が必要なコードのバグまたは問題 |
| 黄色(太字) | 重要度の高いアクション警告 |
| オレンジ(太字&下線) | 一時的な回避策または注意領域 |
| ティール(太字) | パフォーマンスの提案または一般的なコンテキスト |
| 青 | 設計提案または潜在的な改善 |
ディレクティブとブロックヘッダー
Lint&フォーマットディレクティブ:
// bml-lint-disable-lineや/* beautify ignore:start */のようなコメントは、特徴的な紫色のボーダーでスタイル設定され、制御タグを視認しつつ邪魔にならないようにします。標準ドキュメントヘッダー:
Function Name:、Description:、Inputs:、またはReturns:で始まる関数ドキュメントブロックは、自動的にグループ化され、水色の斜体フォントで色付けされます。
5. インタラクティブ設定ダッシュボードWebView
CPQ-BML: Open Settings(cpqBml.settings.open)を使用して、カスタムグラフィカルダッシュボードで接続と機能を設定します:
接続タブ: サーバーのサイトURL、認証方式、アクティブなAPI認証情報を入力します。
環境タブ: 複数のサンドボックス(例:
Dev、Test、UAT、Production)を保存して、アクティブなターゲットを切り替えます。機能タブ: クリーンなUIで、リンティングルール、Better Commentsのスタイリング、一般的な拡張機能アシスタントを切り替えます。
セキュアストレージ統合: VS Code Secret Storage API に直接接続します。認証情報、パスワード、トークンはOSのキーチェーンに保存され、平文の設定ファイルに書き込まれることはありません。
接続テスト: ワンクリックチェックで、設定を適用する直前にリモート認証情報とサイト接続を検証します。
6. リモートREST統合と同期
CPQ開発ワークフローをローカルエディター内で完全に実行します:
コードのプル: リモートサーバーからユーティリティライブラリ関数とコマースプロセス関数(
cpqBml.rest.pullLibraryFunctions、cpqBml.rest.pullCommerceFunctions)を、それらのメタデータとともに取得します。リモート検証とコンパイル:
CPQ-BML: Validate Current File Against CPQを実行して、アクティブなドキュメントに対してOracleのサーバーサイドコンパイラを起動し、構文診断をローカルに表示します。サンドボックスデバッガー:
CPQ-BML: Debug Current Function on CPQを実行して、パラメータピッカーダイアログを起動し、テスト値をサンドボックスランタイムに送信して、ターミナルで標準出力を確認します。デプロイコントロール: 個別ファイルの保存、ユーティリティライブラリの一括デプロイ、または完全なコマースプロセス構成を使用して、変更したコードを即座にデプロイします。
7. AI統合用Model Context Protocol(MCP)サーバー
この拡張機能は、組み込みのセキュアなModel Context Protocol(MCP)サーバーを実行し、AIコーディングアシスタント(Claude Codeなど)がワークスペース内のコードを安全に検査、デバッグ、デプロイできるようにします。
graph TD
subgraph External Environment
AI[AI Client / Claude Code]
end
subgraph VS Code Host
MCP[MCP Server <br> 127.0.0.1:47821]
Ext[CPQ-BML Extension]
Sec[OS Keychain / Secret Storage]
end
subgraph Cloud Service
CPQ[Oracle CPQ Sandbox / Instance]
end
AI -- "MCP JSON-RPC Protocol" --> MCP
MCP -- "Internal Bridge (No Auth Shared)" --> Ext
Ext -- "Retrieves Credentials" --> Sec
Ext -- "REST API Requests" --> CPQセキュリティモデル
認証情報、クッキー、シークレットトークンは、拡張機能のセキュアなコンテキスト内に保持されます。MCPサーバーはこれらの値をAIクライアントに公開しません。MCPサーバーは単に実行役として機能し、ローカル拡張機能インスタンスを介してリクエストをルーティングするだけです。
AI作業の分離
AIエージェントがMCPを介してファイルの変更またはダウンロードを要求すると、拡張機能は分離された [variableName]-AI.bml 作業コピーを作成します。これにより、エージェントがローカルスクリプトを上書きするのを防ぎ、コミット前にdiffツールで変更を確認できます。
公開されているMCPツール
list_util_functions:リモートのユーティリティライブラリ関数をすべて列挙します。list_commerce_functions:CPQインスタンス上のすべてのコマーススクリプトを一覧表示します。pull_function:標準BMLを取得し、ローカルに.bmlファイルと-meta.jsonファイルとして保存します。save_function:更新をCPQ環境に適用します。validate_function:CPQサーバーコンパイラに問い合わせて変更を検証します。debug_function:テストパラメータを使用して関数をリモートで実行します。deploy_function/mass_deploy_util_functions:個別またはバッチ単位の関数をデプロイします。deploy_commerce_process:プロセス構成全体を公開します。create_util_function:新しいユーティリティ関数をスキャフォールドして公開します。create_override:標準(システム)関数の編集可能なオーバーライドを作成します - 検証、保存、またはデプロイの前に必要です。remove_override:オーバーライドされた標準関数をCPQのシステムバージョンに戻します(破壊的操作のため、confirm:trueが必要です)。
8. AIエージェントスキル統合(AgentSkills.io)
CPQ-BMLには、AgentSkills.io 仕様に基づいて設計されたプリコンパイル済みの「Agent Skills」セットが同梱されています。これにより、ワークスペースと対話する際にこれらのスキルをネイティブに解析するAIコーディングアシスタント(Claude CodeやCursorなど)に、深いドメイン知識が注入されます。
ゼロ構成セットアップ:
拡張機能の設定でMCPサーバーを有効にすると、CPQ-BMLはこれらのスキルをワークスペースに自動的に登録します。手動で実行するセットアップコマンドはありません!
拡張機能パッケージを小さく保ち、ワークスペースをクリーンに保つために:
大規模なセマンティックナレッジベースは、ビルド時に高度に最適化された
.brアーカイブに圧縮されます。実行時には、拡張機能はこの知識をセキュアなVS Code Global Storageディレクトリに透過的に展開します。
ワークスペースにポインターファイル(例:
.agents/skills.json、CLAUDE.md、.cursorrules)を自動的にプロビジョニングし、AIアシスタントを
コマンド ID | タイトル | 説明 | エディタツールバーショートカット |
|
| WebView ダッシュボードを起動します | - |
|
| ワークスペースを再帰的にフォーマットします | - |
|
| クイックピックで環境を切り替えます | - |
|
| Basic 認証用のパスワードを安全に保存します | - |
|
| Bearer トークン認証情報を安全に保存します | - |
|
| ユーティリティ BML 関数をダウンロードします | - |
|
| コマース BML スクリプトをダウンロードします | - |
|
| アクティブな BML ファイルをサーバー上でコンパイルします |
|
|
| ライブランナーダイアログを起動します |
|
|
| バッファの変更をリモート CPQ に保存します |
|
|
| BML 関数をローカル/リモートでスキャフォールドします | - |
|
| ユーティリティスクリプトをサーバー上に公開します |
|
|
| ローカルのユーティリティファイルをバッチでプッシュします | - |
|
| アクティブなプロセス設定をデプロイします |
|
|
| 標準ファイルをローカルでオーバーライドします |
|
|
| アクティブなローカルオーバーライドファイルを破棄します |
|
|
| ログパネルの出力を消去します |
|
|
| ローカル MCP アクセスエンドポイント URL を表示します | - |
|
| 高速オフラインドキュメントビューアを開きます(通常はホバーツールチップの Read Offline Help リンクから起動されます) | - |
⚙ 構成設定
VS Code の settings.json または設定エディタ UI で以下のオプションを構成します:
{
"cpqBml.connection.enabled": true,
"cpqBml.connection.siteUrl": "example.bigmachines.com",
"cpqBml.connection.authMethod": "basic",
"cpqBml.connection.username": "api_developer",
"cpqBml.connection.environments": [
{
"name": "Dev Sandbox",
"siteUrl": "dev.bigmachines.com",
"username": "api_developer",
"authMethod": "basic"
}
],
"cpqBml.rest.restVersion": "v18",
"cpqBml.rest.commerceProcess": "oraclecpqo",
"cpqBml.rest.commerceDocument": "transaction",
"cpqBml.rest.pullFolder": "library",
"cpqBml.features.lint": true,
"cpqBml.features.comments": true,
"cpqBml.mcp.enable": false,
"cpqBml.mcp.port": 47821,
"cpqBml.mcp.logToTerminal": false,
"cpqBml.debug.logRestDetails": false,
"cpqBml.debug.logOutputToFile": false
}🔧 フォーマッタ設定 (.bmlbeautifyrc)
任意のディレクトリに .bmlbeautifyrc 構成ファイルを配置すると、BML フォーマッタのルールをカスタマイズできます。オプションは JS-beautify の構造に基づいてモデル化されています:
{
"indent_size": 2,
"brace_style": "collapse",
"preserve_newlines": true,
"max_preserve_newlines": 1,
"space_before_conditional": true
}📂 プロジェクト構造
このプロジェクトは、BML エディタサービス、REST ネットワーキング、テストユーティリティ、AI 統合を明確に分離したモジュール設計構造になっています:
├── app/ # Extension Core Source Code
│ └── lang/ # Language Intelligence & Tooling
│ ├── beautify/ # Code Formatter & Beautification Engine
│ │ ├── commandWorkspace.js # Workspace-wide mass formatter
│ │ ├── docHeader.js # Auto-insert /// doc block comment completion
│ │ └── index.js # Formatting core config/integration
│ ├── comments/ # Better Comments parser (tags, directives, headers)
│ ├── intellisense/ # IntelliSense (autocompletions, hovers, signatures)
│ │ ├── index.js # Go to definition, References, Rename registrations
│ │ ├── workspaceIndex.js # Codebase scanner indexing util.* & commerce.*
│ │ ├── helpViewer.js # Fast offline docs webview (Docusaurus-style ::: admonitions)
│ │ └── custom-snippets.json # Smart snippet database
│ ├── lint/ # Real-time Native Static Diagnostics
│ │ ├── lint.js # Central rule runner pipeline
│ │ ├── nullSafety.js # Checks nullable results of bmql() / get()
│ │ ├── infiniteLoop.js # Identifies empty or non-populating loops
│ │ └── best-practices/ # BMQL safety, security, doc-verified guaranteed failures, etc.
│ ├── mcp/ # Model Context Protocol AI Tool Integration
│ │ ├── server.js # Local MCP server implementation
│ │ └── tools/ # Declarative AI helper tools
│ ├── metrics/ # Code quality analysis WebView Dashboard
│ │ ├── complexity.js # Cyclomatic complexity & nesting depth calculations
│ │ ├── report.js # Metrics accumulator logic
│ │ └── reportWebview.js # WebView layout rendering
│ ├── rest/ # Oracle CPQ REST Client Integration
│ ├── settings-panel/ # Extension settings GUI dashboard WebView
│ ├── testing/ # Safe sandboxed local execution & unit testing
│ │ ├── runner.js # Sidecar *.bmltest.json executor
│ │ └── snapshot.js # Regression snapshot comparisons
│ └── xslt/ # XSLT formatting, & linking features
│
├── test/ # Automated Test Suites
│ ├── linter/ # Tests for suppressions & core linter behaviors
│ ├── mcp/ # Tests for local MCP tool server
│ └── rest/ # Offline mocked testing for CPQ REST sync
│
├── extension.js # Extension Activation/Deactivation Entry-point
├── package.json # VS Code Extension manifest & command declarations
└── README.md # Project documentation🚀 インストールとセットアップ
マーケットプレイスからインストール: VS Code の拡張機能パネル (
Ctrl+Shift+X/Cmd+Shift+X) で「CPQ-BML」を検索し、Install をクリックします。初期オンボーディング: 初回ロード時に Settings Dashboard が自動的に起動します。
環境のセットアップ: サイトの詳細を入力し、認証方法を選択して、接続を確認します。
認証情報の安全な保存:
CPQ-BML: Set CPQ PasswordまたはCPQ-BML: Set CPQ Auth Tokenコマンドを使用して、パスワードやキーを安全に保存します。
💻 ローカル開発
この拡張機能を実行、カスタマイズ、または貢献したい場合:
前提条件
Node.js (v22 以降を推奨)
Visual Studio Code
手順
リポジトリのクローン:
git clone https://github.com/vikram-vn/cpq-bml.git cd cpq-bml依存関係のインストール:
npm installプロジェクトのコンパイル:
npm run compile拡張機能ホストの実行: VS Code でルートワークスペースを開き、F5 を押します(または
Run and Debug->Launch Extensionに移動します)。拡張機能開発ホストウィンドウが開き、BML サポートをすぐにテストできます。
📄 ライセンスと変更履歴
ライセンス: このプロジェクトは MIT License の下でライセンスされています。
変更履歴: 詳細なバージョン履歴、追加機能、更新内容は CHANGELOG.md で確認できます。
免責事項: この拡張機能は独立したコミュニティプロジェクトであり、Oracle Corporation または BigMachines とは提携、スポンサー、承認、または関連していません。
This server cannot be deployed
Maintenance
Related MCP Connectors
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Manage portable AI agent playbooks, Agent Skills, MCP configurations, personas, and memory.
Securely search and manage workspace context files for AI agents and teams.
Run tickets, boards, OKRs and cloud coding agents in your Builderforce workspace
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to perform Business Central AL development tasks including language server operations, container management, Git version control, and file system operations for professional BC development workflows.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Salesforce organizations through project-based CLI integration, allowing execution of Apex, SOQL queries, object descriptions, and org management using local Salesforce DX project configurations.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to manage local project files and Git operations through MCP tools, including file CRUD, search, Git status, recent commits, and project summaries.-
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to develop within a local project workspace by reading and modifying files, running commands and tests, checking Git state, and persisting progress as history sessions that can be restored in later conversations.-