ooligo
mcp-server

SalesforceのRead/WriteをClaudeに公開するMCPサーバー

Difficulty
上級
Setup time
90min
For
revops · gtm-engineer
RevOps

Stack

スコープが絞られた監査対応アクセスをClaudeに提供するModel Context Protocolサーバーです。オブジェクト読み取り、SELECT専用のSOQLエンドポイント、3つのRevOpsヘルパー(pipeline_by_stagestale_oppsat_risk_commits)、正当化と監査パイプラインを常に通過する2つの書き込みを搭載しています。Claude DesktopまたはClaude Codeに組み込んで、チームは「今週アクティビティのないCommitステージの案件を表示して」「案件0061aのクローズ日を更新して、理由:顧客によるプッシュ」をチャットを離れずに依頼できます——モデルに削除ボタンを渡すことなく。完全なスキャフォールドは apps/web/public/artifacts/mcp-server-salesforce-revops/ のアーティファクトバンドルに収録されており、pip install -e . でインストールできる README.mdpyproject.tomlsrc/salesforce_revops_mcp/server.py が含まれています。

使用すべきタイミング

RevOpsと予測の作業が明確な週次リズム——パイプラインレビュー、ステージ衛生管理、ディール精査、単一フィールドの修正——を持ち、各質問のためにSalesforceにコンテキストスイッチするコストがSOQLの記述や適切なレポートの検索コストを上回る場合に、このサーバーを使用してください。このパターンは特に2つのロールに効果的です。以前は保存済み検索のブラウザタブで生活していたRevOpsリードが自然言語でClaudeに質問し、構造化された回答を得て、予測ドキュメントに貼り付けます。以前はいくつかの停滞したフィールドを修正するために1回限りのApex匿名ブロックを書いていたGTMエンジニアが、次の監査サイクルのために古い値と新しい値が保持されたカスタム監査オブジェクトの行として着地する正当化付きの update_field をClaudeに依頼します。

また、このワークフローのHubSpotバージョンをすでにリリースしており(アーティファクトバンドルの構造はHubSpot CSサーバーパイロットを踏襲しています)、システムオブレコード全体でチームのClaude プロンプトがポータブルになるように対称性を求めている場合にも適切なパターンです。同じ形のツール、同じレスポンススタイル、同じ監査姿勢。

使用すべきでないタイミング

次のいずれかに該当する場合はスキップしてください:

  • AI駆動の書き込みのための監査ポリシーを組織が合意していない場合。 スキャフォールドは監査を安価にします。省略可能にはしません。「誰がこのフィールドを変更してなぜか」をセキュリティが議論していない場合は、ツールリストから add_noteupdate_field を省略した読み取り専用サブセットをリリースし、ポリシーが確定したら再検討してください。
  • バルクDMLが必要な場合。 このサーバーはリクエストあたり200レコードにハードキャップし、単一レコードの書き込みのみを公開します。数千行の大量更新はData Loaderジョブまたは適切にガバナンスされたApexバッチに属します——チャットツールではありません。このキャップは機能です。誤った質問の解釈でモデルがパイプラインの半分を「親切に」書き直すことを防ぎます。
  • 予測モデルがサードパーティツール(Clari、BoostUp、Gong Forecast)にある場合。 興味深いファクトはSalesforceにはもうありません。ClaudeがSoRを照会すると古い真実のスライスを返し、混乱を招くだけです。代わりに予測ツールのAPIにClaudeを向けるか、そのツールが独自のMCPをリリースするまで待ってください。
  • 週1〜2件のパイプラインレビューの質問しかない場合。 償却価値はセットアップとオンゴイングトークンコストを下回ります。保存済みレポートを使い続けてください。
  • コンプライアンス体制がLLMへのPII送信を禁止している場合。 規制対象の業界(医療、金融)では顧客レコードをサードパーティのLLMにプッシュすることを禁止している場合があります。これはポリシーの問題であり、アーキテクチャの問題ではありません。

セットアップ

バンドルの README.md が信頼できる情報源です。以下のステップは方向性の説明です。稼働中のツール登録までの合計時間:接続先のアプリとCleanup_Audit__cオブジェクトがすでに存在する場合は約90分、構築が必要な場合は2〜3時間。

  1. パッケージをインストールします。 バンドルをクローンし、python -m venv .venv、アクティベートし、pip install -e .。依存関係は mcp>=1.2.0httpxpydanticsimple-salesforce(リフレッシュトークンのTODO用に利用可能なまま)です。
  2. SalesforceでConnected Appを作成します。 OAuthを有効にし、スコープを apirefresh_token, offline_access に設定し、コールバックURLを http://localhost:1717/callback(またはOAuthヘルパーがある場所)に設定します。Salesforceが必須とする10分間の伝播を待ちます。Consumer KeyとConsumer Secretをコピーします。
  3. アクセストークンを取得します。 このスキャフォールドは SFDC_ACCESS_TOKEN を環境から直接読み取り、リフレッシュトークンフローをTODOとして文書化しています。開発では、sfdx auth:web:login の後に sfdx force:org:display --verbose を使用するのが簡単です。本番環境では、リフレッシュを処理して現在のトークンをenvに書き込むサイドカーでサーバーをラップしてください。
  4. Cleanup_Audit__cカスタムオブジェクトを作成します。 フィールド:Object_Name__c(テキスト)、Record_Id__c(テキスト18)、Field_Name__c(テキスト)、Old_Value__c(ロングテキスト)、New_Value__c(ロングテキスト)、Justification__c(ロングテキスト)、Performed_By__c(テキスト)。統合ユーザーにこのオブジェクトへのCRUDを付与します。
  5. 環境変数を設定してClaude Desktopに登録します。 SFDC_INSTANCE_URLSFDC_ACCESS_TOKENSFDC_API_VERSION(デフォルト v60.0)、SFDC_AUDIT_OBJECT(デフォルト Cleanup_Audit__c)、SFDC_COMMIT_STAGE_NAME(デフォルト Commit)。READMEのJSONブロックを claude_desktop_config.json に追加します。Claude Desktopを再起動します。
  6. サニティチェックします。 Claudeに「次の90日間のステージ別パイプラインを表示して」と依頼し、SalesforceのパイプラインレポートEdgeと比較します。次に、実際の正当化を持つサンドボックスの案件に対して update_field を実行し、フィールドが変更される前に Cleanup_Audit__c の行が書き込まれたことを確認します。

公開される内容

10のツール。目的でグループ化されており、Claudeとあなたがどれをいつ使うかを推論できます。

  • オブジェクト読み取り: get_accountget_opportunityget_contactget_lead。標準フィールドと該当する場所でオーナー。
  • SOQL: query(soql, bypass_sharing=False)。SELECTのみ。忘れた場合は自動で WITH SECURITY_ENFORCED を追加し、忘れた場合は自動で LIMIT 200 を挿入します。INSERTUPDATEDELETEUPSERTMERGEFINDEXEC を含む文字列を拒否します。bypass_sharing=True は現在例外を発生させ、将来のTooling API統合のために予約されています。
  • RevOpsヘルパー: pipeline_by_stage(close_date_window_days, owner_id?)stale_opps(days_in_stage_threshold)at_risk_commits(quarter_end_date)。各ツールはパラメーター化されたSOQL文字列を作成し、同じ harden_soql バリデーターを通じてプッシュし、意図に応じて集計またはローレベルのデータを返します。
  • 監査対応書き込み: add_note(object_type, object_id, body)ContentNote を作成し ContentDocumentLink を介してリンクします。update_field(object_type, object_id, field_name, new_value, justification) は10文字以上の正当化を要求し、変更前に古い値とともに Cleanup_Audit__c の行を書き込み、単一フィールドのPATCHを実行します。監査挿入が失敗した場合、フィールドの更新は実行されません。

delete_* ツールなし、バルクDMLなし、ステージ遷移のショートカットなし、マージなし、変換なし。ワークフローにそれらを行わせたい場合は、独自の監査ストーリーを持つ別の名前付きツールを作成します。原則:すべての取り消し不可能なアクションには独自のボタンが必要であり、自由形式のコマンドではありません。

エンジニアリング姿勢

スキャフォールドはいくつかの意見のある選択をしています。採用前に理解する価値があります。

SOQLホワイトリストはコンストラクションによるものであり、正規表現ではない。 query ツールは SELECT で始まらないものを拒否し、次にDMLまたはSOSLキーワードに対する単語境界マッチを拒否します。SOQL自体は読み取り専用です——言語に UPDATE Opportunity SET … はありません——しかし明示的な拒否は意図を明確にし、誰かがツールを通じてapex匿名を送り込もうとするケースをキャッチします。

WITH SECURITY_ENFORCEDは必須。 Salesforceの /query RESTPエンドポイントは要求しない限りフィールドレベルのセキュリティをサイレントにバイパスします。スキャフォールドは忘れた場合に句を注入するため、フィールドへの読み取り権限がないユーザーは列が静かに省略された回答ではなく、明確な INSUFFICIENT_ACCESS エラーを受け取ります。

LIMIT キャップは構造的なもの。 すべてのヘルパーは明示的な LIMIT を持つSOQL文字列を作成します。query ツールは見つからない場合は LIMIT 200 を注入します。200レコードを超えるバルク読み取りはBulk APIに属します。これはレスポンスペイロードをモデルにとって扱いやすく保ち、日次APIクォータを予測可能にします。

書き込みに必須の正当化。 update_field は少なくとも10文字の justification を要求し、フィールドに触れる前に監査行を書き込みます。監査優先の順序は、監査書き込みが失敗した場合にアクションの記録なしで意図の記録が残ることを意味します。代替案——最初に更新し次に監査——は監査書き込みが失敗した場合に記録された理由のない変更を残します。失敗した意図行を週次で照合してください。

削除ツールは永久に不可。 削除はSalesforce独自のUIとData Loaderを通じてのみ公開されており、これらにはすでに組織レベルのガードレールがあります。ここに delete_* ツールを追加するとそれらのガードレールを迂回することになり、わずかな時間の節約のために影響範囲が増大します。それだけの価値はありません。

コストの現実

3つのコストライン。単独では大きくはありませんが、合計すると現実的です。

  • Claudeサブスクリプション。 チームがClaude DesktopまたはClaude Codeに支払っているもの(Pro $20/ユーザー/月、Maxティア $100〜200/ユーザー/月、またはAPI消費)。MCPサーバー自体はこれを変更しません。
  • サーバーのセルフホスト。 スキャフォールドはClaude DesktopユーザーごとにローカルのPythonプロセスとして実行されます。開発者ノートPCではインフラコストはゼロ。非開発者が使用できるよう(FastAPIを同じディスパッチロジックの前に配置して)共有サービスとしてラップする場合は、小さなVMを予算に入れてください——任意のクラウドで月$20〜50、既にKubernetesクラスターがある場合はそれ以下。
  • Salesforce APIクォータ。 デフォルトはEnterpriseオーガンでは24時間あたり15,000 APIコール。1日1回パイプラインを引き出して週20件のディールを精査する典型的なRevOpsリードは1日約200〜300コールを消費します。チーム全体のバルクパイプラインレビューは1日1,000〜2,000コールにスパイクする可能性があります。ヘルパーの200レコードキャップはクォータを予測可能にするために部分的に存在します。

Claudeサイドのトークンコストはプロンプトではなくレスポンスペイロードに支配されます。レコードあたり約600トークンで200件の案件の引き出しは呼び出しあたり約120Kトークンです。Claude 3.5 Sonnet価格でインプットに約$0.36/コール。RevOpsリードあたり週3〜5回のパイプラインレビューセッションで、サブスクリプションに加えて月のユーザーあたり一桁のドルになります。余裕を持って四捨五入してオールインで月$20/ユーザーと呼んでください。

成功の定義

展開から1か月後の測定可能なシグナル:週次パイプラインレビューの質問への回答時間が「タブを切り替えてレポートを開いてフィルタリングしてエクスポートする」(約5分)から「Claudeに尋ねて回答を読む」(30秒以下)に短縮されます。チームが週に尋ねる質問の数に掛け算してください。計測が困難だがより重要なシグナル:「データ担当者に尋ねる質問」のバックログを並行して維持することをチームがやめる理由は、答えを得ることが安くなったからです。

2つ目のシグナル:Cleanup_Audit__c テーブルに実際のクリーンアップ作業——クローズ日の修正、オーナーの再割り当て、ステージの修正——に見える行が、各々に一文の人間が読める正当化が付いて蓄積されていきます。そのテーブルが1か月後に空の場合、誰も書き込みツールを使用していないか(問題なし——読み取り専用の価値だけでも本物です)、正当化要件が回避されているか(問題あり——調査してください)のいずれかです。

代替手段との比較

  • Salesforce Einstein / Agentforce。 ファーストパーティで、プラットフォームにネイティブに統合され、個別のプロセスのホスティングは不要です。トレードオフ:価格はユーザーごと月ごとで高額です(Einsteinアドオンで$30〜50/ユーザー/月。Agentforceの会話ベース価格は異なります)。会話型UXはSalesforce内に存在します——チームがSalesforceを使用していなければ使えません。MCPサーバーパターンはClaudeをすべてのシステムオブレコードにわたる普遍的なチャットサーフェスとして維持します。チームがSalesforceで生活している場合はEinsteinを選択してください。Claudeで生活している場合はこのサーバーを選択してください。
  • チャットボットを供給するカスタムApex/RESTエンドポイント。 最大のコントロール。最大のメンテナンス負担でもあり、ビルトインのツールディスカバリーストーリーもありません。すべてのツールのJSONスキーマを手動で構築し、ディスパッチを構築し、認証サイドカーを構築します。MCPサーバーは約400行でそのすべてを提供します。
  • TableauまたはCRM Analyticsダッシュボード。 形が違うツールです。ダッシュボードは「毎週月曜日に同じ5つのビューを見たい」という問題に優れており、このMCPは「事前にビューを構築していない質問をしたい」という問題に優れています。補完物であり、代替ではありません。
  • 現状(保存済みレポート+開発者コンソールでの手動SOQL)。 無料。遅い。保存済みレポートを書いた人が去ると時代遅れになります。MCPサーバーは回答時間で勝り、ヘルパーツールのライブラリが成長するにつれてさらに優位になります。

注意点

READMEに完全な内容が記載されています。短縮版:

  • Connected Appのスコープ規律。 OAuthトークンは実行ユーザーが読み取れるすべてを読み取れます。絞ったプロファイルで専用の統合ユーザーを作成し、四半期ごとにレビューします。ガード:Performed_By__c=policy-review 行として監査オブジェクトに書き込まれた統合ユーザープロファイルのレビュー日。
  • バルク読み取りでのガバナー制限の爆発。 200レコードのキャップは日次APIクォータを保護しますが、500K行のリードテーブルに対する配慮のない query は数分でクォータの一部を消費する可能性があります。ガード:harden_soqlLIMIT 200 を無条件で注入します。日常業務には生SOQLではなくヘルパーを使うようチームに指示してください。
  • FLSバイパスリスク。 REST /query はデフォルトでフィールドレベルのセキュリティを強制しません。ガード:スキャフォールドはそれを省略したすべてのクエリに WITH SECURITY_ENFORCED を追加します。これを無効にするには harden_soql への明示的な正当化が伴う変更が必要です。
  • 書き込み時の監査ログのギャップ。 監査行が書き込まれた後にフィールド更新が失敗した場合、実際の変更なしに記録された意図があります。ガード:監査行はそのまま残ります。週次で照合してください。これを明示的にフラグする Failed__c をREADMEのTODO6として監査オブジェクトに追加してください。
  • OAuthトークンのリフレッシュ失敗。 長期間のトークンは失効し、金曜日の午後4時に401になることが最悪の失敗モードです。ガード:リフレッシュサイドカーでサーバーをフロント処理し、401に大きな音で失敗させ、サイレントにリトライしないでください。

スタック

  • Salesforce — システムオブレコード
  • MCP Python SDKmcp>=1.2.0 パッケージ。Serverstdio_server、ツールレジストリデコレーターを提供します
  • httpx — 非同期RESTクライアント
  • simple-salesforce — リフレッシュトークンのTODO用に利用可能なまま(スキャフォールド自体は生のhttpxを使用)
  • Claude DesktopまたはClaude Code — 自然言語インターフェース、ツールコーラー
  • Cleanup_Audit__c — カスタム監査オブジェクト。書き込みが記録されていることを証明するカナリア

Files in this artifact

Download all (.zip)