Salesforce Metadata MCP について
Salesforce Metadata MCPは、ClaudeなどのMCPクライアントからSalesforce組織を設定・開発するためのMCPサーバーです。幅広いツール群をロード可能なツールセットに分け、必要に応じた検索と呼び出しに対応します。
主な機能
- 01Salesforceメタデータの作成・管理
- 02Flows、Apex、LWCの構築
- 03セキュリティ、ユーザー、権限の管理
- 04ツールセットのオンデマンド検索・ロード
- 05スキーマ照会とデバッグログの確認
活用シーン
- 01Salesforceオブジェクトとフィールドの作成
- 02FlowsまたはApexの構築・デプロイ
- 03権限とデバッグログの確認
- 04Salesforce作業に必要なツールの検索
MCP 対応
stdio経由でSalesforceの管理、開発、自動化ツールをMCPクライアントに提供します。ツールセットは必要に応じてロードでき、`sf_call_tool`を使えばクライアントのツール一覧に表示されていないツールも呼び出せます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y salesforce-metadata-mcpSF_INSTANCE_URLSalesforce org URL, e.g. https://yourorg.my.salesforce.comSF_ACCESS_TOKENシークレットSalesforce access token (or use SF_ALIAS / JWT variables instead)SF_ALIASSalesforce CLI org alias (alternative to SF_ACCESS_TOKEN)SF_TOOLSETSToolsets to load at startup: 'all', 'none', or a comma-separated list. Default: core,metadata. All 228 tools stay available via sf_find_tool / sf_load_toolset, and callable via sf_call_tool even on clients that do not refresh their tool list.SF_PRODUCTION_GUARDRefuse destructive tools on production orgs: 'destructive' (default), 'strict', or 'off'. Metadata creation is never affected.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
200掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| fullName | string | はい | カスタムオブジェクトの API 名。例:'Invoice__c' |
| label | string | はい | UI に表示される単数形のラベル。例:'Invoice' |
| pluralLabel | string | はい | 複数形のラベル。例:'Invoices' |
| description | string | いいえ | オブジェクトの任意の説明 |
| nameFieldLabel | string | いいえ | 標準 Name フィールドのラベル。例:'Invoice Name' |
| nameFieldType | enum | いいえ | Name フィールドの種類:'Text'(自由入力)または 'AutoNumber'(自動採番)Text | AutoNumber |
| autoNumberFormat | string | いいえ | AutoNumber 名称フィールドの形式。例:'INV-{0000}'。nameFieldType が AutoNumber の場合は必須です。 |
| deploymentStatus | enum | いいえ | オブジェクトのデプロイステータスDeployed | InDevelopment |
| sharingModel | enum | いいえ | オブジェクトの組織全体のデフォルト(OWD)共有モデルReadWrite | Read | Private | ControlledByParent | FullAccess |
| enableActivities | boolean | いいえ | このオブジェクトで活動(タスク/イベント)を許可します |
| enableHistory | boolean | いいえ | 項目履歴の追跡を有効にします |
| enableReports | boolean | いいえ | オブジェクトをレポートで使用できるようにします |
| enableSearch | boolean | いいえ | このオブジェクトで検索を有効にする |
詳細
salesforce-metadata-mcp
Agentforce エージェント、OmniStudio コンポーネント、DevOps Center パイプラインを構築できる唯一の Salesforce MCP サーバー — スキーマの説明、Apex の読み取り、デバッグログなど、日々の開発を一通りサポートし、Claude または任意の MCP クライアントから Salesforce 組織を直接構築、設定、自動化するための合計 228 個のツールを提供します。
クイックスタート
npx -y salesforce-metadata-mcp
または、グローバルにインストールします。
npm install -g salesforce-metadata-mcp
salesforce-metadata-mcp
設定(Claude Desktop / Claude Code)
MCP の設定(claude_desktop_config.json または .claude/settings.json)に追加します。
{
"mcpServers": {
"salesforce": {
"command": "npx",
"args": ["salesforce-metadata-mcp"],
"env": {
"SF_INSTANCE_URL": "https://your-org.salesforce.com",
"SF_ACCESS_TOKEN": "your_access_token"
}
}
}
}
すべての認証方法と詳しいセットアップ手順については、SETUP.md をご覧ください。
ワンクリックインストール(Claude Desktop)
最新リリースから salesforce-metadata-mcp-<version>.mcpb をダウンロードし、Claude Desktop → Settings → Extensions にドラッグします。組織の URL と認証情報を求める画面が表示されるため、JSON を編集する必要はありません。
このバンドルは、サーバーを組み込まずに起動時に npm から取得するため、常に公開済みの最新バージョンを実行でき、アップグレードのたびに再ダウンロードする必要もありません。
Docker
docker build -t salesforce-metadata-mcp .
docker run -i --rm \
-e SF_INSTANCE_URL="https://your-org.my.salesforce.com" \
-e SF_ACCESS_TOKEN="your_access_token" \
salesforce-metadata-mcp
イメージはソースからビルドされ、非 root ユーザーとして実行され、本番用の依存関係のみが含まれています。このサーバーは stdio 経由で MCP 通信を行うため、-i が必要です。コンテナはバックグラウンドサービスとして実行するのではなく、クライアントによって制御されます。Salesforce CLI のログインフローにはブラウザーが必要なため、コンテナ内では SF_ALIAS は機能しません。代わりに、トークン、JWT、リフレッシュトークン、またはクライアント認証情報の環境変数を使用してください。
ツールセット — コンテキストを消費せずに 228 個のツールを読み込む
228 個のツールはすべて常に利用できます。ほとんどのツールは、必要になるまでモデルのコンテキストに読み込まれません。
すべてのツールを最初に列挙すると、約 98,000 トークンを消費します。これは 200k のコンテキストウィンドウの約半分に相当し、セッションで OmniStudio や DevOps Center を一度も使うかどうかに関係なく、何かを入力する前に消費されてしまいます。候補となるツールが 228 個もあるリストでは、モデルが適切なツールを選ぶ精度も明らかに低下します。そのため、サーバーは小さなコアセットを読み込んで起動し、残りは必要に応じて読み込みます。
| 起動時の状態 | 列挙されるツール | 概算トークン数 |
|---|---|---|
デフォルト(core,metadata) | 20 | ~9,900 |
| 追加で 2 つのツールセットを読み込んだ後 | 43 | ~20,800 |
SF_TOOLSETS=all | 233 | ~99,100 |
デフォルトでは、ほぼすべてのセッションで必要になる機能をカバーします。オブジェクトの説明と一覧表示、SOQL クエリ、メタデータのデプロイ、取得、削除、デプロイ状況の確認、そしてコアスキーマの作成(オブジェクト、項目、数式項目、選択リスト値、入力規則、承認プロセス)です。
次の 5 つのツールは常に利用でき、ほかのすべてのツールにアクセスする手段となります。
sf_find_tool— すべての 228 個のツールを名前で検索し、一度の呼び出しで一致するツールを読み込みます。*「omniscript を作成して」*と頼むと、該当するツールを見つけてomnistudioを読み込み、すぐに呼び出せるようにします。通常、あなたにもモデルにもこれだけで十分です。sf_load_toolset— 指定したツールセットを明示的に読み込みます。sf_list_toolsets— すべてのツールセット、それぞれのツール数、読み込み済みのセットを一覧表示します。sf_call_tool— 読み込み済みかどうかに関係なく、ツールリストに事前に表示されていないツールでも、名前を指定して呼び出します。引数は検証され、本番環境向けのガードも直接呼び出す場合と同じように適用されます。sf_tool_schema— 任意のツールの入力スキーマを返します。これにより、クライアントから見えないツールについてもsf_call_toolを構成できます。
実際には、これを手動で管理する必要はありません。必要なことを頼めば、モデルが必要なものを読み込みます。
読み込んだツールが表示されない場合
ツールセットを読み込むと、サーバー上で有効になり、notifications/tools/list_changed が送信されます。クライアントはこれを受け取ると、tools/list を再取得することになっています。しかし、再取得しないクライアントもあります。その場合、読み込みは成功と報告され、ツールも実際に有効になっているのに、ツールリストに追加されていないため、モデルはどのツールも呼び出せません。
どのクライアントでもツールにアクセスできるように、次の2つの仕組みで対処しています。
sf_load_toolsetは、クライアントが再取得したかどうかを確認してレスポンスで伝えます。アクセスできなくなったツールについて、無条件に成功と報告することはありません。sf_call_toolを使えば、再取得しなくてもすべてのツールにアクセスできます。sf_tool_schemaと組み合わせることで、SF_TOOLSETS=noneの場合でも、ハンドシェイク時のツールリストだけから、全228ツールを利用できます。
起動時にすべてを読み込む従来の動作に戻すには、SF_TOOLSETS=all を設定します。5つのメタツールだけで起動するには、SF_TOOLSETS=none を設定します。独自のコアを選ぶには、リストを渡します。
{ "env": { "SF_TOOLSETS": "metadata,objects,automation,security" } }
利用可能なツールセット:core、metadata、objects、data、flows、automation、security、apex、
lwc、ui、pages、actions、agentforce、omnistudio、omnichannel、devops、deployment、
integrations、identity、reports、experience、admin、monitoring、audit、einstein、
knowledge、cpq、sandbox、streaming、visualforce、aura、comms、mcp、i18n。
Flow ツールは独立した flows ツールセットにあります。sf_create_flow は Flow 要素のスキーマ全体を含み、単独で15,266バイト(約4,126トークン)に達する、サーバー内で最大のツール定義です。デフォルトのツールセットから除外することで、Flow を作成しないセッションではその分の負荷がかからず、作成するセッションでは検証済みのスキーマ全体を利用できます。
ツール — 全228個
主なツールを以下に示します。パラメーターとプロンプト例を含む完全なリファレンスについては、TOOLS.md をご覧ください。
オブジェクトと項目
| ツール | 説明 |
|---|---|
sf_create_custom_object | すべての設定を指定してカスタムオブジェクトを作成 |
sf_create_custom_field | 任意のオブジェクトに項目を作成(すべての型に対応) |
sf_create_formula_field | 数式言語を完全にサポートした数式項目を作成 |
sf_add_picklist_values | 既存の選択リスト項目に値を追加 |
sf_create_custom_metadata_type | カスタムメタデータ型(__mdt)を作成 |
sf_create_custom_metadata_record | カスタムメタデータ型のレコードを作成 |
sf_create_custom_label | カスタム表示ラベルを作成または更新 |
sf_create_custom_setting | 階層型またはリスト型のカスタム設定を作成 |
sf_create_global_value_set | オブジェクト間で共有できる選択リストを作成 |
sf_create_record_type | 選択リストの上書き設定を含むレコードタイプを作成 |
sf_create_business_process | 商談/リード/ケースのビジネスプロセスを作成 |
sf_create_page_layout | セクションと項目を含むページレイアウトを作成 |
sf_create_sharing_rule | 条件ベースまたは所有者ベースの共有ルールを作成 |
sf_create_field_dependency | 制御選択リストと従属選択リストの依存関係を作成 |
sf_describe_object | オブジェクトの完全なスキーマを読み取る — 項目、型、選択リストの値、子リレーション、レコードタイプ |
sf_list_objects | 部分一致する名前または表示ラベルからオブジェクトを検索 — sf_describe_object の前に行う探索ステップ |
sf_get_metadata_dependencies | 影響分析:このコンポーネントを参照しているものと、その項目にデータが保持されているかを確認 読み取り専用 |
sf_update_custom_object | オブジェクトレベルのプロパティを更新。リスク分類と確認ゲートに対応 |
sf_update_custom_field | 項目の定義を更新。リスク分類に対応し、破壊的な変更は適用前に影響を報告 |
自動化
| ツール | 説明 |
|---|---|
sf_create_flow | Assignment、Decision、GetRecords、CreateRecords(項目値を指定)、DeleteRecords、Loop など、任意の Flow タイプを作成します |
sf_create_approval_process | 複数ステップの承認プロセスを作成します |
sf_create_validation_rule | データ検証ルールを作成します |
sf_create_workflow_field_update | ワークフローの項目更新アクションを作成します |
sf_create_email_alert | ワークフローのメールアラートアクションを作成します |
sf_create_platform_event | Platform Event オブジェクトを作成します |
sf_create_assignment_rule | Lead/Case の割り当てルールを作成します |
sf_create_escalation_rule | Case のエスカレーションルールを作成します |
sf_create_auto_response_rule | Web-to-Lead/Case の自動応答ルールを作成します |
sf_create_matching_rule | 重複レコード照合ルールを作成します |
sf_create_duplicate_rule | 重複レコード検出ルールを作成します |
sf_create_apex_email_service | Apex の受信メールサービスを作成します |
sf_create_scheduled_job | cron を使用して Apex クラスをスケジュールします |
セキュリティとアクセス
| ツール | 説明 |
|---|---|
sf_create_permission_set | すべての権限を含む Permission Set を作成します |
sf_create_role | ロール階層にロールを作成します |
sf_create_queue | メンバーとオブジェクトを指定してキューを作成します |
sf_create_named_credential | コールアウト用の Named Credential を作成します |
sf_get_field_permissions | プロファイルと Permission Set 全体の現在の項目レベルセキュリティ付与を監査します |
UI とエクスペリエンス
| ツール | 説明 |
|---|---|
sf_create_lightning_app | ナビゲーションバーやユーティリティバーを備えた Lightning アプリを作成します |
sf_create_tab | オブジェクト用のカスタムタブを作成します |
sf_create_compact_layout | コンパクトレイアウト(ハイライトパネル)を作成します |
sf_create_list_view | フィルターと列を指定してリストビューを作成します |
sf_create_email_template | HTML/テキスト形式のメールテンプレートを作成します |
sf_create_static_resource | テキストコンテンツから静的リソースを作成します |
sf_create_custom_notification_type | カスタム通知タイプを作成します |
sf_create_report_type | カスタムレポートタイプを作成します |
sf_create_dashboard | コンポーネントを含むダッシュボードを作成します |
Apex 開発
| ツール | 説明 |
|---|---|
sf_create_apex_class | 任意の Apex クラスを組織にデプロイします |
sf_create_apex_trigger | 任意のオブジェクトに Apex トリガーをデプロイします |
sf_create_apex_test_class | テストクラスをデプロイし、必要に応じてテストを実行します |
sf_run_apex_tests | テストクラスを実行し、成功/失敗の結果を取得します |
sf_execute_anonymous_apex | 匿名 Apex を実行し、出力を確認します |
sf_get_apex_class | 既存の Apex クラスのソースを読み取ります |
sf_get_apex_trigger | 既存の Apex トリガーのソースを読み取ります |
sf_enable_debug_logs | ユーザーの Apex デバッグログを有効にします(TraceFlag) |
sf_disable_debug_logs | Apex デバッグログを無効に戻します(有効な TraceFlag を削除します) |
sf_get_debug_logs | 最近の Apex デバッグログを一覧表示します |
sf_get_debug_log_body | デバッグログの全内容を読み取ります |
sf_scan_apex_antipatterns | SOQL/DML のループ内実行、ハードコードされた ID、デバッグステートメントを対象に、軽量なヒューリスティック検査を行います |
sf_run_code_scanner | Salesforce Code Analyzer を介して、複数エンジンによる静的解析(PMD、SFGE の SOQL インジェクションのデータフロー解析、RetireJS、ESLint)を実行します |
LWC 開発
| ツール | 説明 |
|---|---|
sf_create_lwc | HTML、JS、CSS を含む完全な LWC をデプロイします |
sf_update_lwc | 既存の LWC コンポーネントを更新します |
Experience Cloud
| ツール | 説明 |
|---|---|
sf_create_experience_site | Experience Cloud サイトを作成します |
sf_create_experience_page | Experience サイト内にページを作成します |
Agentforce
| ツール | 説明 |
|---|---|
sf_create_agent | Agentforce エージェント(Bot シェル)を作成 |
sf_create_agent_action | フロー/Apex にリンクされたエージェントアクション(GenAiFunction)を作成 |
sf_create_agent_topic | アクションを組み込んだエージェントトピック(GenAiPlugin)を作成 |
sf_create_agent_planner | エージェントをトピックに接続(GenAiPlanner)— ルーティングに必須 |
外部連携
| ツール | 説明 |
|---|---|
sf_create_connected_app | OAuth Connected App を作成 |
sf_create_external_client_app | External Client App(OAuth)を作成 — Connected App に代わる Salesforce の新しいアプリです。Connected App とは異なり、Client Credentials Flow(Run As ユーザーを含む)をここでは API で設定できます |
sf_create_external_data_source | Connect 用の External Data Source を作成 |
sf_create_external_object | External Object(__x)を作成 |
sf_create_remote_site_setting | コールアウト用に外部 URL を許可リストに登録 |
sf_create_csp_setting | LWC 用の CSP 信頼済みサイトを作成 |
変更セットとデプロイ
| ツール | 説明 |
|---|---|
sf_create_outbound_change_set | Outbound Change Set を作成 |
sf_add_to_change_set | コンポーネントを変更セットに追加 |
sf_deploy_metadata | Metadata API でメタデータをデプロイ(testLevel、インライン XML に対応) |
sf_check_deploy_status | デプロイジョブのステータスを確認 |
sf_retrieve_metadata | 組織からメタデータを取得 |
sf_delete_metadata | メタデータコンポーネント(CustomObject、CustomField、Flow、GenAiFunction、Bot など)を完全に削除 |
MCP サーバー管理
| ツール | 説明 |
|---|---|
sf_create_mcp_server | 新しい MCP サーバープロジェクトをディスク上に生成 |
sf_create_mcp_tool | 既存の MCP サーバーに新しいツールを追加 |
sf_list_mcp_tools | MCP サーバープロジェクト内のすべてのツールを一覧表示 |
プロンプトの例
オブジェクト全体を作成する:
「Project__c というカスタムオブジェクトを作成し、フィールドとして Name(テキスト)、Status__c(選択リスト:Planning/Active/Complete)、Budget__c(通貨)を追加してから、Status が Active の場合に Budget を必須にする入力規則を追加してください。」
Apex をデプロイする:
「OpportunityService という Apex クラスを作成し、Amount > 100000 のすべての Opp をクエリしてください。次に、そのテストクラスを作成してください。」
フローを作成する:
「Opportunity で、保存後に Stage = Closed Won の場合に実行されるレコードトリガーフローを作成してください。所有者にメールアラートを送信し、30 日後が期限のフォローアップ Task を作成してください。」
LWC を設定する:
「accountSummary という Lightning Web Component を作成し、取引先名、業種、年間収益を表示してください。レコードページで使用できるようにしてください。」
Agentforce を設定する:
「SalesAssistant という Agentforce エージェントを作成してください。次に、Get_Account_Orders フローにリンクされた GetOrders アクションを作成してください。続いて、アクションとして [GetOrders] を含む OrderManagement トピックを作成してください。最後に、SalesAssistant を OrderManagement トピックに接続してください。」
環境変数
| 変数 | 説明 | 必須 |
|---|---|---|
SF_INSTANCE_URL | 組織の URL(例:https://org.salesforce.com) | 常に |
SF_CLIENT_ID | Connected App のクライアント ID | OAuth の場合 |
SF_CLIENT_SECRET | Connected App のクライアントシークレット | OAuth の場合 |
SF_REFRESH_TOKEN | OAuth リフレッシュトークン | OAuth の場合 |
SF_ALIAS | Salesforce CLI の組織エイリアス | CLI の場合 |
SF_ACCESS_TOKEN | 静的アクセストークン(有効期限は約 1 時間) | 静的トークンの場合 |
PORT | HTTP サーバーのポート(デフォルト:3000) | HTTP モードの場合 |
TRANSPORT | stdio または http(デフォルト:stdio) | 任意 |
SF_TOOLSETS | 起動時に読み込むツールセット:all、none、またはカンマ区切りのリスト(デフォルト:core,metadata) | 任意 |
SF_TOOLSETS_VERBOSE | 起動時にツールセットの一覧全体を stderr に出力するには 1 を設定 | 任意 |
SF_PRODUCTION_GUARD | destructive(デフォルト)、strict、または off — 下記を参照 | 任意 |
本番環境での書き込みガード
このサーバーは Salesforce の認証情報を LLM に渡し、それを使って何をするかは LLM が判断します。モデルが処理中に読むあらゆるテキスト――ケースのコメント、項目の説明、取得した .flow ファイル、メール本文など――に指示が含まれている可能性があり、その指示をユーザーが入力したものと見分ける方法は、後続のどの段階にもありません。
そのため、本番組織では、デフォルトで次の 9 つのツールが拒否されます。
| 本番環境でブロック | 理由 |
|---|---|
sf_delete_metadata | メタデータと、その中のすべてのレコードを削除します |
sf_delete_record、sf_bulk_delete_records | データを削除します |
sf_execute_anonymous_apex | 実行後に痕跡を残さない任意のコードです |
sf_uninstall_package | 管理パッケージとそのデータを削除します |
sf_create_user、sf_update_user | 権限を昇格させます |
sf_reset_user_password、sf_freeze_user | アカウントの乗っ取り/ロックアウトにつながります |
メタデータの作成は影響を受けません。 137 個すべての sf_create_* ツール、sf_deploy_metadata、sf_retrieve_metadata は、これまでどおり本番環境で動作します。自然言語でメタデータを作成することがこのパッケージの目的であり、それを制限するガードは無効にされるだけだからです。
Apex の作成(sf_create_apex_class、sf_create_apex_trigger)も、トリガーがすべての DML で実行されるにもかかわらず、ブロックされません。判断基準は監査可能性です。作成された Apex はメタデータであり、名前、作成者、デプロイ記録があるため、見つけて削除できます。sf_execute_anonymous_apex は見つける手がかりを何も残さないため、これだけがブロックされます。
組織が本番環境とみなされるのは、サンドボックスではなく、Developer Edition 組織でもなく、トライアルまたはスクラッチ組織の有効期限切れ状態でもない場合に限られます。サンドボックス、開発用組織、スクラッチ組織が制限の対象になることはありません。
{ "env": { "SF_PRODUCTION_GUARD": "strict" } } // refuse ALL writes on production
{ "env": { "SF_PRODUCTION_GUARD": "off" } } // no guard at all
このガードは確認プロンプトではなく、明示的に拒否するものです。呼び出し元のエージェントが自分で承認できるプロンプトは制御にならず、このサーバーはクライアントの権限チェックを回避して実行されることもよくあります。ガードを解除できるのは環境変数だけです。
ドキュメント
- SETUP.md — 前提条件、認証、Claude の設定
- TOOLS.md — 228 個すべてのツールと、パラメーターの詳細なドキュメント
- AGENTFORCE.md — Agentforce エージェントの作成ガイド
- APEX_LWC.md — Apex および LWC の開発ガイド
- CHANGELOG.md — バージョン履歴
バグと機能リクエスト
バグを見つけた場合や、新しいツールを希望する場合は、issue を作成してください。バグ報告と機能リクエスト用のテンプレートがあります。投稿する際は、パッケージのバージョンとツール名を記載し、組織の URL や認証情報は必ず削除してください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。