Salesforce CLI MCP Server

Integrations

  • Wraps the Salesforce CLI to provide access to Salesforce org functionality including organization management, Apex code execution, data querying, schema exploration, and deployment capabilities.

Salesforce CLI MCP サーバー

Claude Desktop などの LLM ツールに Salesforce CLI 機能を提供するモデル コンテキスト プロトコル (MCP) サーバー。

概要

この MCP サーバーは、Salesforce CLI ( sf ) コマンドライン ツールをラップし、そのコマンドを MCP ツールおよびリソースとして公開することで、LLM 対応エージェントが次のことを実行できるようにします。

  • Salesforce CLI のトピックとコマンドに関するヘルプ情報を表示します
  • 適切なパラメータを使用して Salesforce CLI コマンドを実行する
  • AIワークフローでSalesforce CLI機能を活用する

要件

  • Node.js 18+ および npm
  • Salesforce CLI ( sf ) のインストールと設定
  • CLI で設定された Salesforce 組織の認証情報

インストール

# Clone the repository git clone <repository-url> cd sfMcp # Install dependencies npm install

使用法

サーバーの起動

# Basic usage npm start # With project roots npm start /path/to/project1 /path/to/project2 # or using the convenience script npm run with-roots /path/to/project1 /path/to/project2 # As an npx package with roots npx -y codefriar/sf-mcp /path/to/project1 /path/to/project2

MCP サーバーは stdio トランスポートを使用します。これは、 MCP Inspectorや Claude Desktop などの MCP クライアントで使用できます。

Claude Desktopでの設定

Claude Desktop の.claude.json構成でこの MCP を構成するには:

{ "tools": { "salesforce": { "command": "/path/to/node", "args": [ "/path/to/sf-mcp/build/index.js", "/path/to/project1", "/path/to/project2" ] } } }

npm パッケージを直接使用する:

{ "tools": { "salesforce": { "command": "/path/to/npx", "args": [ "-y", "codefriar/sf-mcp", "/path/to/project1", "/path/to/project2" ] } } }

発達

# Watch mode (recompiles on file changes) npm run dev # In another terminal npm start [optional project roots...]

利用可能なツールとリソース

このMCPサーバーは、Salesforce CLIコマンドをMCPツールとして提供します。Salesforce CLIから利用可能なすべてのコマンドを自動的に検出して登録するだけでなく、最もよく使用されるコマンドを具体的に実装します。

コアツール

  • sf_version - Salesforce CLI のバージョン情報を取得する
  • sf_help - Salesforce CLI コマンドのヘルプ情報を取得します
  • sf_cache_clear - コマンド検出キャッシュをクリアする
  • sf_cache_refresh - コマンド検出キャッシュを更新する

プロジェクトディレクトリ管理(ルート)

Salesforce プロジェクトのコンテキスト(デプロイメントなど)を必要とするコマンドでは、プロジェクトディレクトリを指定する必要があります。MCP は、ファイルシステム MCP と同様に、複数のプロジェクトディレクトリ(ルート)をサポートします。

設定方法

方法1: コマンドライン引数経由

# Start the MCP with project roots npm start /path/to/project1 /path/to/project2 # or npx -y codefriar/sf-mcp /path/to/project1 /path/to/project2

このように設定すると、ルートは自動的にroot1root2などの名前が付けられ、最初のものがデフォルトとして設定されます。

方法2: MCPツールを使用する

  • sf_set_project_directory - コマンドで使用する Salesforce プロジェクト ディレクトリを設定します
    • パラメータ:
      • directory - sfdx-project.json ファイルを含むディレクトリへのパス
      • name - (オプション) このプロジェクトルートの名前
      • description - (オプション) このプロジェクトルートの説明
      • isDefault - (オプション) このルートをコマンド実行のデフォルトとして設定します
  • sf_list_roots - 設定されたすべてのプロジェクトルートを一覧表示します
  • sf_detect_project_directory - ユーザーメッセージからプロジェクトディレクトリを検出しようとします

使用例:

# Set project directory with a name sf_set_project_directory --directory=/path/to/your/sfdx/project --name=project1 --isDefault=true # List all configured roots sf_list_roots # Or include in your message: "Please deploy the apex code from the project in /path/to/your/sfdx/project to my scratch org"

方法 3: Claude デスクトップ構成以下の説明に従って、 .claude.jsonでプロジェクト ルートを構成します。

プロジェクトルートの使用

特定のプロジェクト ルートでコマンドを実行できます。

# Using resource URI sf://roots/project1/commands/project deploy start --sourcedir=force-app # Using rootName parameter sf_project_deploy_start --sourcedir=force-app --rootName=project1

デプロイ、ソース取得、その他のプロジェクト固有の操作などのコマンドを実行するには、プロジェクトディレクトリを指定する必要があります。複数のルートが設定されている場合、特に指定がない限り、デフォルトのルートが使用されます。

実装された主なツール

次のコマンドは具体的に実装されており、動作が保証されています。

組織管理

  • sf_org_list - Salesforce 組織の一覧
    • パラメータ: jsonverbose
  • sf_auth_list_orgs - 認証された Salesforce 組織を一覧表示する
    • パラメータ: jsonverbose
  • sf_org_display - 組織の詳細を表示する
    • パラメータ: targetusernamejson
  • sf_org_open - ブラウザで組織を開く
    • パラメータ: targetusernamepathurlonly

アペックスコード

  • sf_apex_run - 匿名の Apex コードを実行する
    • パラメータ: targetusernamefileapexcodejson
  • sf_apex_test_run - Apex テストを実行する
    • パラメータ: targetusernametestnamessuitenamesclassnamesjson

データ管理

  • sf_data_query - SOQLクエリを実行する
    • パラメータ: targetusernamequeryjson
  • sf_schema_list_objects - 組織内の sObject を一覧表示する
    • パラメータ: targetusernamejson
  • sf_schema_describe - Salesforce オブジェクトを記述する
    • パラメータ: targetusernamesobjectjson

展開

  • sf_project_deploy_start - ソースを組織にデプロイする
    • パラメータ: targetusernamesourcedirjsonwait

動的に検出されたツール

サーバーは利用可能なすべての Salesforce CLI コマンドを検出し、 sf_<topic>_<command>の形式でツールとして登録します。

例えば:

  • sf_apex_run - 匿名の Apex コードを実行する
  • sf_data_query - SOQLクエリを実行する

ネストされたトピック コマンドの場合、ツール名にはアンダースコアを含む完全なパスが含まれます。

  • sf_apex_log_get - Apexログを取得する
  • sf_org_login_web - Webフローを使用して組織にログインする

サーバーは、可能な場合は、一般的なネストされたコマンドの簡略化されたエイリアスも作成します。

  • sf_apex_log_getのエイリアスとしてのsf_get
  • sf_org_login_webのエイリアスとしてのsf_web

使用できるコマンドは、インストールされている Salesforce CLI プラグインによって異なります。

**注:**コマンド検出は起動時のパフォーマンス向上のためキャッシュされます。新しいSF CLIプラグインをインストールする場合は、 sf_cache_refreshツールを使用してキャッシュを更新し、サーバーを再起動してください。

リソース

次のリソースには、Salesforce CLI に関するドキュメントが提供されています。

  • sf://help - メインの CLI ドキュメント
  • sf://topics/{topic}/help - トピックのヘルプドキュメント
  • sf://commands/{command}/help - コマンドのヘルプドキュメント
  • sf://topics/{topic}/commands/{command}/help - トピックコマンドのヘルプドキュメント
  • sf://version - バージョン情報
  • sf://roots - 設定されているすべてのプロジェクトルートを一覧表示します
  • sf://roots/{root}/commands/{command} - 特定のプロジェクトルートでコマンドを実行する

仕組み

  1. 起動時に、サーバーはキャッシュされたコマンドのリスト( ~/.sf-mcp/command-cache.jsonに保存されている)をチェックします。
  2. 有効なキャッシュが存在する場合は、コマンドを登録するために使用されます。そうでない場合は、コマンドは動的に検出されます。
  3. 検出中に、サーバーはsf commands --json照会して、利用可能なコマンドの完全なリストを取得します。
  4. コマンドメタデータ(パラメータと説明を含む)はJSON出力から直接抽出されます。
  5. すべてのコマンドは適切なパラメータスキーマを持つMCPツールとして登録されます
  6. ヘルプドキュメント用のリソースが登録されています
  7. ツールが呼び出されると、対応するSalesforce CLIコマンドが実行されます。

プロジェクトルーツマネジメント

Salesforce プロジェクトコンテキストを必要とするコマンドの場合:

  1. サーバーは、 sf_set_project_directory経由でプロジェクトルートが設定されているかどうかを確認します。
  2. 複数のルートが設定されている場合は、特定のルートが指定されていない限り、デフォルトのルートが使用されます。
  3. ルートが設定されていない場合、サーバーはユーザーにプロジェクトディレクトリを指定するように要求します。
  4. コマンドは適切なプロジェクトディレクトリ内で実行され、適切なコンテキストが確保されます。
  5. ユーザーは必要に応じて複数のプロジェクトルートを追加したり切り替えたりすることができます。

プロジェクト固有のコマンド(デプロイ、取得など)は、適切なプロジェクトディレクトリで自動的に実行されます。プロジェクトのコンテキストを必要としないコマンドの場合、作業ディレクトリは関係ありません。

特定のプロジェクト ルートでコマンドを実行するには、次の操作を行います。

  • リソース URI の使用: sf://roots/{rootName}/commands/{command}
  • コマンドツールにrootNameパラメータを提供する(内部実装の詳細)
  • sf_set_project_directory --isDefault=trueを使用して特定のルートをデフォルトとして設定する

コマンドキャッシュ

起動パフォーマンスを向上させるために、MCP サーバーは検出されたコマンドをキャッシュします。

  • キャッシュは~/.sf-mcp/command-cache.jsonに保存されます。
  • すべてのトピック、コマンド、パラメータ、説明が含まれています
  • キャッシュには検証タイムスタンプとSF CLIバージョンチェックがあります
  • デフォルトでは、キャッシュは7日後に期限切れになります。
  • 新しいSalesforce CLIプラグインをインストールするときは、 sf_cache_refreshを使用してキャッシュを更新します。

キャッシュの問題のトラブルシューティング

サーバーの初回起動時には完全なコマンド検出が実行されるため、多少時間がかかる場合があります。コマンドの欠落やキャッシュの問題などの問題が発生した場合は、以下の手順に従ってください。

  1. MCP サーバーを停止します (実行中の場合)
  2. キャッシュファイルを手動で削除します: rm ~/.sf-mcp/command-cache.json
  3. サーバーを再起動します: npm start

これにより、公式の CLI メタデータを使用してすべてのコマンドの完全な再検出が強制されます。

特定のコマンドがまだ見つからない場合、または新しい SF CLI プラグインをインストールした場合:

  1. Claude Desktopのsf_cache_refreshツールを使用する
  2. MCPサーバーを停止して再起動します

ネストされたトピックの処理

Salesforce CLI は、複数レベルに渡る階層的なコマンド構造を持っています。この MCP サーバは、これらのネストされたコマンドを次のように処理します。

  • コロンで区切られたパスをアンダースコア形式に変換する ( apex:log:getsf_apex_log_get )
  • 可能な場合は、一般的なディープコマンドにエイリアスを提供します( sf_apex_log_getの場合はsf_get
  • ツール名に完全なコマンド階層を保持する
  • sf commands --json使用する

ネストされたトピック コマンドは、可能な場合は 2 回登録されます。1 回は完全な階層名で、もう 1 回は簡略化されたエイリアスで登録されるため、簡単に見つけて使用できます。

ライセンス

ISC

You must be authenticated.

A
security – no known vulnerabilities
F
license - not found
A
quality - confirmed to work

Salesforce CLI 機能を Claude Desktop などの LLM ツールに公開し、AI エージェントが Salesforce コマンドを実行し、組織を管理し、コードをデプロイし、自然言語でデータをクエリできるようにします。

  1. Overview
    1. Requirements
      1. Installation
        1. Usage
          1. Starting the server
          2. Configuring in Claude Desktop
          3. Development
        2. Available Tools and Resources
          1. Core Tools
          2. Project Directory Management (Roots)
          3. Key Implemented Tools
          4. Dynamically Discovered Tools
          5. Resources
        3. How It Works
          1. Project Roots Management
          2. Command Caching
          3. Handling Nested Topics
        4. License
          ID: 1qi9nvwagh