Salesforce について
Salesforce は、Claude などの MCP クライアントから Salesforce CRM のレコードにアクセスするための MCP サーバーです。標準 CRM データ向けの 6 つのツールに絞り、ゲートウェイ経由ではリクエストごとに認証情報を受け取れます。
主な機能
- 01オブジェクトの検索とスキーマ確認
- 02SOQL クエリと集計の実行
- 03SOSL によるオブジェクト横断検索
- 04レコードの挿入、更新、削除、upsert
- 05HTTP と stdio のトランスポート
活用シーン
- 01取引先、連絡先、商談の検索
- 02リードやケースの分析
- 03オブジェクトの項目と関連の確認
MCP 対応
MCP サーバーとして、Salesforce CRM の検索、スキーマ確認、クエリ、レコード書き込みツールを MCP クライアントに公開します。HTTP と stdio に対応し、ゲートウェイモードではリクエストごとに認証情報を受け取ります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e AUTH_MODE -e SALESFORCE_AUTH_FLOW -e SALESFORCE_CLIENT_ID -e SALESFORCE_CLIENT_SECRET -e SALESFORCE_INSTANCE_URL -e SALESFORCE_USERNAME -e SALESFORCE_PASSWORD -e SALESFORCE_TOKEN -e MCP_TRANSPORT -e LOG_LEVEL ghcr.io/wyre-ai/salesforce-mcp:v1.0.7AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway. Set to 'env' for stdio/local use.SALESFORCE_AUTH_FLOWシークレットSalesforce auth flow: 'client_credentials' (default, requires a Connected App with Client Credentials Flow enabled) or 'username_password' (fallback).SALESFORCE_CLIENT_IDConnected App consumer key. Required when SALESFORCE_AUTH_FLOW=client_credentials.SALESFORCE_CLIENT_SECRETシークレットConnected App consumer secret. Required when SALESFORCE_AUTH_FLOW=client_credentials.SALESFORCE_INSTANCE_URLSalesforce org's My Domain URL (e.g. https://yourorg.my.salesforce.com). Required when SALESFORCE_AUTH_FLOW=client_credentials.SALESFORCE_USERNAMESalesforce username. Only used when SALESFORCE_AUTH_FLOW=username_password.SALESFORCE_PASSWORDシークレットSalesforce password. Only used when SALESFORCE_AUTH_FLOW=username_password.SALESFORCE_TOKENシークレットSalesforce security token. Only used when SALESFORCE_AUTH_FLOW=username_password; optional if the org has IP allowlisting configured instead.MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.LOG_LEVELLog verbosity: debug, info, warn, errorローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/wyre-ai/salesforce-mcp:v1.0.7stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
salesforce-mcp
Salesforce CRM 用 MCP(Model Context Protocol)サーバー。WYRE Gateway の BYOC ユースケースに対応しています。
Salesforce 組織の CRM データを、WYRE MCP Gateway 経由で Claude(およびその他の MCP クライアント)に公開する、用途を絞った HTTP MCP サーバーです。マルチテナントのゲートウェイパターン向けに構築されており、認証情報は HTTP ヘッダーを介してリクエストごとに注入されます。コンテナに起動時のシークレットが埋め込まれることはありません。
対応範囲
このパッケージが提供するツールは意図的に限定的な範囲に絞っており、CRM データ用の 6 つのツールを提供します。より広範な Salesforce MCP サーバーに含まれる Apex のコード管理、カスタムオブジェクト作成、EXECUTE_ANONYMOUS の機能は意図的に省いています。標準 CRM オブジェクト(Accounts、Contacts、Opportunities、Leads、Cases)への読み書きがユースケースです。DX や管理者向けのツールが必要な場合は、公式の @salesforce/mcp パッケージを使用してください。
ツール
| ツール | 目的 |
|---|---|
salesforce_search_objects | 部分一致する名前で、標準オブジェクトとカスタムオブジェクトを検索します。 |
salesforce_describe_object | オブジェクトの完全なスキーマ(フィールド、選択リスト、リレーションシップ)を取得します。 |
salesforce_query_records | リレーションシップのたどりを含む SOQL を実行します。 |
salesforce_aggregate_query | SOQL の GROUP BY/COUNT/SUM/AVG/MIN/MAX を実行します。 |
salesforce_dml_records | レコードを挿入/更新/削除/アップサートします。 |
salesforce_search_all | オブジェクト横断の SOSL 検索を実行します。 |
実行モード
http(デフォルト)::8080でリッスンし、/mcp(JSON-RPC)と/healthを公開します。認証情報はリクエストごとにX-Salesforce-*ヘッダーから取得します。ゲートウェイへのデプロイを想定した構成です。CONDUIT_S2S_SECRETが実際のシークレットでない場合、HTTP は起動を拒否します。stdio:従来の MCP クライアント用トランスポート(Claude Desktop/Cursor)です。認証情報は環境変数から一度だけ読み込まれます。stdio トランスポートではCONDUIT_S2S_SECRETを使用しません。
.env.example をコピーし、以下の変数を設定してください。このファイルでは CONDUIT_S2S_SECRET を空のままにしてください。
| 変数 | 必須 | 説明 |
|---|---|---|
SALESFORCE_CLIENT_ID / SALESFORCE_CLIENT_SECRET / SALESFORCE_INSTANCE_URL | stdio および AUTH_MODE=env の場合 | Client Credentials フローで使用します。 |
SALESFORCE_USERNAME / SALESFORCE_PASSWORD / SALESFORCE_TOKEN | ユーザー名とパスワードを使用する場合 | SALESFORCE_AUTH_FLOW=username_password の場合に使用します。組織で IP 許可リストを使用している場合、トークンは省略できます。 |
MCP_TRANSPORT | いいえ | http(デフォルト)または stdio。 |
AUTH_MODE | いいえ | gateway(イメージおよび Compose のデフォルト)または env。Gateway モードでは、各 /mcp リクエストに X-Salesforce-* ヘッダーが必要で、SALESFORCE_* へのフォールバックは行いません。env では、S2S 認証に成功した後にのみ、これらの変数を使用します。 |
CONDUIT_S2S_SECRET | HTTP の場合は必須 | サービス間シークレットです。この値が空、または既知のプレースホルダー(changeme、placeholder、your-s2s-secret、secret、password、test、未解決の ${...} テンプレート、および src/s2s-verify.ts に記載されたその他の代替値)の場合、HTTP はエラーをログに記録してゼロ以外のステータスで終了します。実際の値をコミットしないでください。 |
MCP_ALLOW_INSECURE_DEV | いいえ | ローカル開発で CONDUIT_S2S_SECRET がなくても HTTP を起動する場合に限り、値を正確に 1 に設定します。プロセスは警告をログに記録し、X-Gateway-S2S を検証せず、127.0.0.1 のみでリッスンします。ループバック以外の MCP_HTTP_HOST は無視され、その上書きはログに記録されます。既知のプレースホルダーシークレットが設定されている場合は、引き続き起動を拒否します。 |
MCP_HTTP_HOST | いいえ | 使用可能な CONDUIT_S2S_SECRET が設定されている場合のバインドアドレスです。未設定の場合、シークレットが設定されていれば HOST(デフォルトは 0.0.0.0)が使用されます。使用可能なシークレットがない場合、リスナーは 127.0.0.1 で待ち受けます。コンテナイメージでは 0.0.0.0 が設定されます。 |
PORT | いいえ | HTTP ポートです。デフォルトは 8080 です。 |
HOST | いいえ | MCP_HTTP_HOST が未設定で、シークレットが設定されている場合のフォールバック用バインドアドレスです。デフォルトは 0.0.0.0 です。 |
/health は引き続き認証不要で、認証情報を読み込みません。
# HTTP mode (exits unless CONDUIT_S2S_SECRET is a real secret)
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" PORT=8080 MCP_TRANSPORT=http AUTH_MODE=gateway npm start
# Local HTTP only, without a service-to-service secret (always binds 127.0.0.1)
MCP_ALLOW_INSECURE_DEV=1 MCP_TRANSPORT=http npm start
# stdio mode (env-baked, local testing; no S2S secret)
MCP_TRANSPORT=stdio \
SALESFORCE_AUTH_FLOW=client_credentials \
SALESFORCE_CLIENT_ID=... SALESFORCE_CLIENT_SECRET=... \
SALESFORCE_INSTANCE_URL=https://yourorg.my.salesforce.com \
node dist/entry.js
ヘッダーの仕様(ゲートウェイモード)
CONDUIT_S2S_SECRET が設定されている場合、すべての /mcp リクエストに有効な X-Gateway-S2S ヘッダーを含める必要があります。ゲートウェイモードでは、選択したフローに応じた認証情報ヘッダーも必要です。これらのヘッダーがないリクエストには 401 が返され、プロセス環境変数の SALESFORCE_* にはフォールバックしません。
| ヘッダー | 必須? | 備考 |
|---|---|---|
X-Gateway-S2S | S2S シークレットが設定されている場合は必須 | t=<unix seconds>,v1=<hex hmac-sha256>。X-Gateway-S2S の署名を参照してください。 |
X-Salesforce-Auth-Mode | 任意 | client_credentials(デフォルト)または username_password。 |
X-Salesforce-Client-Id | client_credentials の場合 | Connected App のコンシューマーキー。 |
X-Salesforce-Client-Secret | client_credentials の場合 | Connected App のコンシューマーシークレット。 |
X-Salesforce-Instance-Url | client_credentials の場合 | 顧客の My Domain URL(例:https://acmecorp.my.salesforce.com)。 |
X-Salesforce-Username | username_password の場合 | Salesforce ユーザー。 |
X-Salesforce-Password | username_password の場合 | Salesforce のパスワード。 |
X-Salesforce-Token | username_password の場合 | セキュリティトークン(IP が許可リストに登録されている場合を除き必須)。 |
リクエストごとの認証により、同じコンテナインスタンスで再起動せずに多数の顧客に対応できます。MCP の各 tools/call は、そのリクエストのヘッダーから新しい jsforce.Connection を作成します。
X-Gateway-S2S の署名
v1 は、ASCII 文字列 t=<unix seconds>(ヘッダーの先頭と同じ t= プレフィックス)の HMAC-SHA256 を 16 進数でエンコードしたもので、CONDUIT_S2S_SECRET を鍵として使用します。タイムスタンプはサーバーのクロックから 300 秒以内である必要があります。ヘッダーがない場合、または無効な場合は、HTTP 401 が返されます。シークレットがログやレスポンス本文に書き込まれることはありません。
t=$(date +%s)
v1=$(printf 't=%s' "$t" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" | awk '{print $NF}')
curl -sS http://127.0.0.1:8080/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "X-Gateway-S2S: t=${t},v1=${v1}" \
-H "X-Salesforce-Client-Id: ..." \
-H "X-Salesforce-Client-Secret: ..." \
-H "X-Salesforce-Instance-Url: https://yourorg.my.salesforce.com" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
Salesforce Connected App の設定
Client Credentials フロー(推奨)を使用する場合:
- Salesforce の設定 → アプリケーションマネージャー → 新規 Connected App。
- API(OAuth 設定の有効化) で、OAuth 設定の有効化 と Client Credentials フローの有効化 をオンにします。
- 保存し、反映まで約 5 分待ちます。
- 管理 → ポリシーを編集 → Client Credentials フローで、実行ユーザーを設定します(API 呼び出しは、そのユーザーの権限で実行されます)。
- Connected App のコンシューマーキーとコンシューマーシークレットをコピーし、ゲートウェイの BYOC フィールドに
clientIdとclientSecretとして入力します。 instanceUrlに顧客の My Domain URL を設定します(設定 → My Domain)。
ビルド
npm install
npm run build
コンテナ
イメージはコンテナ内の 0.0.0.0(MCP_HTTP_HOST)でリッスンし、デフォルトは AUTH_MODE=gateway です。ポートをループバックで公開し、S2S シークレットを渡してください。ゲートウェイモードでは、Salesforce の認証情報は各リクエストのヘッダーで渡され、環境変数からは読み取られません。
docker build -t salesforce-mcp:dev .
docker run --rm \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-p 127.0.0.1:8080:8080 \
salesforce-mcp:dev
curl -s http://127.0.0.1:8080/health
Compose は CONDUIT_S2S_SECRET が未設定の場合は起動を拒否し、AUTH_MODE=gateway を設定して 127.0.0.1:8080:8080 を公開し、SALESFORCE_* は注入しません。
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up
シングルテナント HTTP(AUTH_MODE=env)でも S2S シークレットが必要です。その後、SALESFORCE_* が使用されます。
docker run --rm \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-e AUTH_MODE=env \
-e SALESFORCE_AUTH_FLOW=client_credentials \
-e SALESFORCE_CLIENT_ID=your-value \
-e SALESFORCE_CLIENT_SECRET=your-value \
-e SALESFORCE_INSTANCE_URL=https://yourorg.my.salesforce.com \
-p 127.0.0.1:8080:8080 \
salesforce-mcp:dev
公開イメージは ghcr.io/wyre-ai/salesforce-mcp にあり、タグは :latest、:sha-<short_sha>、:v<version> です。
ライセンス
Apache-2.0。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。