mcpField
S
Salesforce

Salesforce

ローカル
github.comビジネス・マーケティング02 週間前に更新

Salesforce について

Salesforce は、Claude などの MCP クライアントから Salesforce CRM のレコードにアクセスするための MCP サーバーです。標準 CRM データ向けの 6 つのツールに絞り、ゲートウェイ経由ではリクエストごとに認証情報を受け取れます。

主な機能

  1. 01オブジェクトの検索とスキーマ確認
  2. 02SOQL クエリと集計の実行
  3. 03SOSL によるオブジェクト横断検索
  4. 04レコードの挿入、更新、削除、upsert
  5. 05HTTP と stdio のトランスポート

活用シーン

  1. 01取引先、連絡先、商談の検索
  2. 02リードやケースの分析
  3. 03オブジェクトの項目と関連の確認

MCP 対応

MCP サーバーとして、Salesforce CRM の検索、スキーマ確認、クエリ、レコード書き込みツールを MCP クライアントに公開します。HTTP と stdio に対応し、ゲートウェイモードではリクエストごとに認証情報を受け取ります。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"wyre-ai-salesforce": {
"command": "docker",
"args": [
"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.7"
],
"env": {
"AUTH_MODE": "<AUTH_MODE>",
"SALESFORCE_AUTH_FLOW": "<SALESFORCE_AUTH_FLOW>",
"SALESFORCE_CLIENT_ID": "<SALESFORCE_CLIENT_ID>",
"SALESFORCE_CLIENT_SECRET": "<SALESFORCE_CLIENT_SECRET>",
"SALESFORCE_INSTANCE_URL": "<SALESFORCE_INSTANCE_URL>",
"SALESFORCE_USERNAME": "<SALESFORCE_USERNAME>",
"SALESFORCE_PASSWORD": "<SALESFORCE_PASSWORD>",
"SALESFORCE_TOKEN": "<SALESFORCE_TOKEN>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンド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.7
設定が必要な環境変数
AUTH_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/wyre-ai/salesforce-mcp:v1.0.7

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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_querySOQL の 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_URLstdio および 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_SECRETHTTP の場合は必須サービス間シークレットです。この値が空、または既知のプレースホルダー(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-S2SS2S シークレットが設定されている場合は必須t=<unix seconds>,v1=<hex hmac-sha256>。X-Gateway-S2S の署名を参照してください。
X-Salesforce-Auth-Mode任意client_credentials(デフォルト)または username_password。
X-Salesforce-Client-Idclient_credentials の場合Connected App のコンシューマーキー。
X-Salesforce-Client-Secretclient_credentials の場合Connected App のコンシューマーシークレット。
X-Salesforce-Instance-Urlclient_credentials の場合顧客の My Domain URL(例:https://acmecorp.my.salesforce.com)。
X-Salesforce-Usernameusername_password の場合Salesforce ユーザー。
X-Salesforce-Passwordusername_password の場合Salesforce のパスワード。
X-Salesforce-Tokenusername_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 フロー(推奨)を使用する場合:

  1. Salesforce の設定 → アプリケーションマネージャー → 新規 Connected App。
  2. API(OAuth 設定の有効化) で、OAuth 設定の有効化 と Client Credentials フローの有効化 をオンにします。
  3. 保存し、反映まで約 5 分待ちます。
  4. 管理 → ポリシーを編集 → Client Credentials フローで、実行ユーザーを設定します(API 呼び出しは、そのユーザーの権限で実行されます)。
  5. Connected App のコンシューマーキーとコンシューマーシークレットをコピーし、ゲートウェイの BYOC フィールドに clientId と clientSecret として入力します。
  6. 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。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。