Skip to main content
Glama
Salesforce MCP Server

Salesforce MCP Server

by tsmztech

Salesforce MCP サーバー

Claude と Salesforce を統合する MCP(Model Context Protocol)サーバー実装により、Salesforce のデータとメタデータを自然言語で操作できるようになります。このサーバーにより、Claude は日常的な言語で Salesforce のオブジェクトとレコードをクエリ、変更、管理できます。

特徴

  • オブジェクトとフィールドの管理:自然言語を使用してカスタムオブジェクトとフィールドを作成および変更します

  • スマートオブジェクト検索: 部分的な名前一致を使用して Salesforce オブジェクトを検索します

  • 詳細なスキーマ情報: あらゆるオブジェクトの包括的なフィールドと関係の詳細を取得します

  • 柔軟なデータクエリ: リレーションシップサポートと複雑なフィルターを使用してレコードをクエリします

  • データ操作: レコードの挿入、更新、削除、アップサートが簡単に行えます

  • クロスオブジェクト検索: SOSL を使用して複数のオブジェクトを検索する

  • Apex コード管理: Apex クラスとトリガーの読み取り、作成、更新

  • 直感的なエラー処理: Salesforce 固有のエラー詳細による明確なフィードバック

Related MCP server: Salesforce MCP Server

インストール

npm install -g @tsmztech/mcp-server-salesforce

ツール

セールスフォース検索オブジェクト

標準オブジェクトとカスタムオブジェクトを検索します。

  • 名前の部分一致による検索

  • 標準オブジェクトとカスタムオブジェクトの両方を検索します

  • 例: 「Account に関連するオブジェクトを検索」では、Account、AccountHistory などが検索されます。

セールスフォースのオブジェクト記述

詳細なオブジェクト スキーマ情報を取得します。

  • フィールド定義とプロパティ

  • 関係の詳細

  • 選択リストの値

  • 例:「アカウントオブジェクトのすべてのフィールドを表示する」

セールスフォースクエリレコード

リレーションシップをサポートするクエリレコード:

  • 親子関係

  • 子と親の関係

  • 複雑なWHERE条件

  • 例: 「すべての取引先とそれに関連する連絡先を取得する」

セールスフォース_dml_レコード

データ操作を実行します。

  • 新しいレコードを挿入する

  • 既存のレコードを更新する

  • レコードを削除する

  • 外部IDを使用したアップサート

  • 例:「複数のアカウントのステータスを更新する」

セールスフォース管理オブジェクト

カスタム オブジェクトを作成および変更します。

  • 新しいカスタムオブジェクトを作成する

  • オブジェクトのプロパティを更新する

  • 共有設定を構成する

  • 例:「顧客フィードバックオブジェクトを作成する」

セールスフォース管理フィールド

オブジェクト フィールドを管理します。

  • 新しいカスタムフィールドを追加する

  • フィールドプロパティを変更する

  • 関係を築く

  • 例: 「取引先に評価選択リスト項目を追加する」

セールスフォース検索すべて

複数のオブジェクトを検索:

  • SOSLベースの検索

  • 複数オブジェクトのサポート

  • フィールドスニペット

  • 例: 「アカウントと商談全体で「クラウド」を検索する」

セールスフォース_読み取り_apex

Apex クラスを読み取ります。

  • 特定のクラスの完全なソースコードを取得する

  • 名前パターンに一致するクラスを一覧表示する

  • クラスのメタデータ(API バージョン、ステータスなど)を表示します

  • 名前パターンでのワイルドカード(*と?)のサポート

  • 例: 「AccountController クラスを表示」または「Account Contに一致するすべてのクラスを検索」

セールスフォースのApex書き込み

Apex クラスを作成および更新します。

  • 新しいApexクラスを作成する

  • 既存のクラス実装を更新する

  • APIバージョンを指定する

  • 例: 「アカウント操作を処理するための新しい Apex クラスを作成する」

セールスフォース読み取りApexトリガー

Apex トリガーを読み取ります。

  • 特定のトリガーの完全なソースコードを取得する

  • 名前パターンに一致するトリガーを一覧表示する

  • トリガーのメタデータ(API バージョン、オブジェクト、ステータスなど)を表示します

  • 名前パターンでのワイルドカード(*と?)のサポート

  • 例: 「AccountTrigger を表示」または「Contact オブジェクトのすべてのトリガーを検索」

セールスフォースの書き込みApexトリガー

Apex トリガーを作成および更新します。

  • 特定のオブジェクトに対して新しいApexトリガーを作成する

  • 既存のトリガー実装を更新する

  • APIバージョンとイベント操作を指定する

  • 例: 「アカウントオブジェクトの新しいトリガーを作成する」または「リードトリガーを更新する」

セールスフォース実行匿名

匿名の Apex コードを実行します。

  • 永続クラスを作成せずにApexコードを実行する

  • デバッグログと実行結果を表示する

  • 他のツールで直接サポートされていないデータ操作に役立ちます

  • 例: 「アカウント指標を計算するための Apex コードを実行する」または「関連レコードを更新するスクリプトを実行する」

セールスフォース管理デバッグログ

Salesforce ユーザーのデバッグ ログを管理します。

  • 特定のユーザーのデバッグログを有効にする

  • アクティブなデバッグログ構成を無効にする

  • デバッグログを取得して表示する

  • ログ レベルを構成する (NONE、ERROR、WARN、INFO、DEBUG、FINE、FINER、FINEST)

  • 例: 「 user@example.comのデバッグログを有効にする」または「管理者ユーザーの最近のログを取得する」

設定

Salesforce認証

次の 2 つの認証方法のいずれかを使用して Salesforce に接続できます。

1. ユーザー名/パスワード認証(デフォルト)

  1. Salesforceの認証情報を設定する

  2. セキュリティトークンを取得する(Salesforce設定からリセット)

2. OAuth 2.0 クライアント認証フロー

  1. Salesforceで接続アプリを作成する

  2. OAuth設定を有効にし、「クライアント資格情報フロー」を選択します

  3. 適切なスコープを設定します(通常は「api」で十分です)

  4. クライアントIDとクライアントシークレットを保存する

  5. 重要: 認証に必要なインスタンス URL (例: https://your-domain.my.salesforce.com ) をメモしてください。

Claude Desktopでの使用

claude_desktop_config.jsonに追加します:

ユーザー名/パスワード認証の場合:

{
  "mcpServers": {
    "salesforce": {
      "command": "npx",
      "args": ["-y", "@tsmztech/mcp-server-salesforce"],
      "env": {
        "SALESFORCE_CONNECTION_TYPE": "User_Password",
        "SALESFORCE_USERNAME": "your_username",
        "SALESFORCE_PASSWORD": "your_password",
        "SALESFORCE_TOKEN": "your_security_token",
        "SALESFORCE_INSTANCE_URL": "org_url"        // Optional. Default value: https://login.salesforce.com
      }
    }
  }
}

OAuth 2.0 クライアント資格情報フローの場合:

{
  "mcpServers": {
    "salesforce": {
      "command": "npx",
      "args": ["-y", "@tsmztech/mcp-server-salesforce"],
      "env": {
        "SALESFORCE_CONNECTION_TYPE": "OAuth_2.0_Client_Credentials",
        "SALESFORCE_CLIENT_ID": "your_client_id",
        "SALESFORCE_CLIENT_SECRET": "your_client_secret",
        "SALESFORCE_INSTANCE_URL": "https://your-domain.my.salesforce.com"  // REQUIRED: Must be your exact Salesforce instance URL
      }
    }
  }
}

注:OAuth 2.0クライアント認証情報フローの場合、 SALESFORCE_INSTANCE_URLはSalesforceインスタンスの正確なURL(例:https: https://your-domain.my.salesforce.com )である必要があります。トークンエンドポイントは<instance_url>/services/oauth2/tokenとして構築されます。

使用例

オブジェクトの検索

"Find all objects related to Accounts"
"Show me objects that handle customer service"
"What objects are available for order management?"

スキーマ情報の取得

"What fields are available in the Account object?"
"Show me the picklist values for Case Status"
"Describe the relationship fields in Opportunity"

レコードのクエリ

"Get all Accounts created this month"
"Show me high-priority Cases with their related Contacts"
"Find all Opportunities over $100k"

カスタムオブジェクトの管理

"Create a Customer Feedback object"
"Add a Rating field to the Feedback object"
"Update sharing settings for the Service Request object"

オブジェクト間の検索

"Search for 'cloud' in Accounts and Opportunities"
"Find mentions of 'network issue' in Cases and Knowledge Articles"
"Search for customer name across all relevant objects"

Apexコードの管理

"Show me all Apex classes with 'Controller' in the name"
"Get the full code for the AccountService class"
"Create a new Apex utility class for handling date operations"
"Update the LeadConverter class to add a new method"

Apexトリガーの管理

"List all triggers for the Account object"
"Show me the code for the ContactTrigger"
"Create a new trigger for the Opportunity object"
"Update the Case trigger to handle after delete events"

匿名Apexコードの実行

"Execute Apex code to calculate account metrics"
"Run a script to update related records"
"Execute a batch job to process large datasets"

デバッグログの管理

"Enable debug logs for user@example.com"
"Retrieve recent logs for an admin user"
"Disable debug logs for a specific user"
"Configure log level to DEBUG for a user"

発達

ソースからのビルド

# Clone the repository
git clone https://github.com/tsmztech/mcp-server-salesforce.git

# Navigate to directory
cd mcp-server-salesforce

# Install dependencies
npm install

# Build the project
npm run build

貢献

貢献を歓迎します!お気軽にプルリクエストを送信してください。

ライセンス

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。

問題とサポート

問題が発生した場合やサポートが必要な場合は、 GitHub リポジトリに問題を報告してください。

Available Tools

15 tools
salesforce_aggregate_queryA
Read-only

Execute SOQL queries with GROUP BY, aggregate functions, and statistical analysis. Use this tool for queries that summarize and group data rather than returning individual records.

NOTE: For regular queries without GROUP BY or aggregates, use salesforce_query_records instead.

This tool handles:

  1. GROUP BY queries (single/multiple fields, related objects, date functions)

  2. Aggregate functions: COUNT(), COUNT_DISTINCT(), SUM(), AVG(), MIN(), MAX()

  3. HAVING clauses for filtering grouped results

  4. Date/time grouping: CALENDAR_YEAR(), CALENDAR_MONTH(), CALENDAR_QUARTER(), FISCAL_YEAR(), FISCAL_QUARTER()

Examples:

  1. Count opportunities by stage:

    • objectName: "Opportunity"

    • selectFields: ["StageName", "COUNT(Id) OpportunityCount"]

    • groupByFields: ["StageName"]

  2. Analyze cases by priority and status:

    • objectName: "Case"

    • selectFields: ["Priority", "Status", "COUNT(Id) CaseCount", "AVG(Days_Open__c) AvgDaysOpen"]

    • groupByFields: ["Priority", "Status"]

  3. Count contacts by account industry:

    • objectName: "Contact"

    • selectFields: ["Account.Industry", "COUNT(Id) ContactCount"]

    • groupByFields: ["Account.Industry"]

  4. Quarterly opportunity analysis:

    • objectName: "Opportunity"

    • selectFields: ["CALENDAR_YEAR(CloseDate) Year", "CALENDAR_QUARTER(CloseDate) Quarter", "SUM(Amount) Revenue"]

    • groupByFields: ["CALENDAR_YEAR(CloseDate)", "CALENDAR_QUARTER(CloseDate)"]

  5. Find accounts with more than 10 opportunities:

    • objectName: "Opportunity"

    • selectFields: ["Account.Name", "COUNT(Id) OpportunityCount"]

    • groupByFields: ["Account.Name"]

    • havingClause: "COUNT(Id) > 10"

Important Rules:

  • All non-aggregate fields in selectFields MUST be included in groupByFields

  • Use whereClause to filter rows BEFORE grouping

  • Use havingClause to filter AFTER grouping (for aggregate conditions)

  • ORDER BY can only use fields from groupByFields or aggregate functions

  • OFFSET is not supported with GROUP BY in Salesforce

Inputs: objectName (required), selectFields (required), groupByFields (required), limit, +3 more.

salesforce_describe_objectA
Read-only

Get detailed schema metadata including all fields, relationships, and field properties of any Salesforce object. Examples: 'Account' shows all Account fields including custom fields; 'Case' shows all Case fields including relationships to Account, Contact etc.

Inputs: objectName (required).

salesforce_dml_recordsA

Perform data manipulation operations on Salesforce records:

  • insert: Create new records

  • update: Modify existing records (requires Id)

  • delete: Remove records (requires Id)

  • upsert: Insert or update based on external ID field Examples: Insert new Accounts, Update Case status, Delete old records, Upsert based on custom external ID

Inputs: records (required), operation (required), objectName (required), externalIdField.

salesforce_execute_anonymousA

Execute anonymous Apex code in Salesforce.

Examples:

  1. Execute simple Apex code: { "apexCode": "System.debug('Hello World');" }

  2. Execute Apex code with variables: { "apexCode": "List accounts = [SELECT Id, Name FROM Account LIMIT 5]; for(Account a : accounts) { System.debug(a.Name); }" }

  3. Execute Apex with debug logs: { "apexCode": "System.debug(LoggingLevel.INFO, 'Processing accounts...'); List accounts = [SELECT Id FROM Account LIMIT 10]; System.debug(LoggingLevel.INFO, 'Found ' + accounts.size() + ' accounts');", "logLevel": "DEBUG" }

Notes:

  • The apexCode parameter is required and must contain valid Apex code

  • The code is executed in an anonymous context and does not persist

  • The logLevel parameter is optional (defaults to 'DEBUG')

  • Execution results include compilation success/failure, execution success/failure, and debug logs

  • For security reasons, some operations may be restricted based on user permissions

  • This tool can be used for data operations or updates when there are no other specific tools available

  • When users request data queries or updates that aren't directly supported by other tools, this tool can be used if the operation is achievable using Apex code

Inputs: apexCode (required), logLevel.

salesforce_manage_debug_logsA

Manage debug logs for Salesforce users - enable, disable, or retrieve logs.

Examples:

  1. Enable debug logs for a user: { "operation": "enable", "username": "user@example.com", "logLevel": "DEBUG", "expirationTime": 30 }

  2. Disable debug logs for a user: { "operation": "disable", "username": "user@example.com" }

  3. Retrieve debug logs for a user: { "operation": "retrieve", "username": "user@example.com", "limit": 5 }

  4. Retrieve a specific log with full content: { "operation": "retrieve", "username": "user@example.com", "logId": "07L1g000000XXXXEAA0", "includeBody": true }

Notes:

  • The operation must be one of: 'enable', 'disable', or 'retrieve'

  • The username parameter is required for all operations

  • For 'enable' operation, logLevel is optional (defaults to 'DEBUG')

  • Log levels: NONE, ERROR, WARN, INFO, DEBUG, FINE, FINER, FINEST

  • expirationTime is optional for 'enable' operation (minutes until expiration, defaults to 30)

  • limit is optional for 'retrieve' operation (maximum number of logs to return, defaults to 10)

  • logId is optional for 'retrieve' operation (to get a specific log)

  • includeBody is optional for 'retrieve' operation (to include the full log content, defaults to false)

  • The tool validates that the specified user exists before performing operations

  • If logLevel is not specified when enabling logs, the tool will ask for clarification

Inputs: username (required), operation (required), limit, logId, +3 more.

salesforce_manage_fieldA

Create new custom fields or modify existing fields on any Salesforce object:

  • Field Types: Text, Number, Date, Lookup, Master-Detail, Picklist etc.

  • Properties: Required, Unique, External ID, Length, Scale etc.

  • Relationships: Create lookups and master-detail relationships

  • Automatically grants Field Level Security to System Administrator (or specified profiles) Examples: Add Rating__c picklist to Account, Create Account lookup on Custom Object Note: Use grantAccessTo parameter to specify profiles, defaults to System Administrator

Inputs: fieldName (required), operation (required), objectName (required), type, +14 more.

salesforce_manage_field_permissionsB

Manage Field Level Security (Field Permissions) for custom and standard fields.

  • Grant or revoke read/edit access to fields for specific profiles or permission sets

  • View current field permissions

  • Bulk update permissions for multiple profiles

Examples:

  1. Grant System Administrator access to a field

  2. Give read-only access to a field for specific profiles

  3. Check which profiles have access to a field

Inputs: fieldName (required), operation (required), objectName (required), editable, +2 more.

salesforce_manage_objectB

Create new custom objects or modify existing ones in Salesforce:

  • Create: New custom objects with fields, relationships, and settings

  • Update: Modify existing object settings, labels, sharing model Examples: Create Customer_Feedback__c object, Update object sharing settings Note: Changes affect metadata and require proper permissions

Inputs: operation (required), objectName (required), label, description, +5 more.

salesforce_query_recordsA
Read-only

Query records from any Salesforce object using SOQL, including relationship queries.

NOTE: For queries with GROUP BY, aggregate functions (COUNT, SUM, AVG, etc.), or HAVING clauses, use salesforce_aggregate_query instead.

Examples:

  1. Parent-to-child query (e.g., Account with Contacts):

    • objectName: "Account"

    • fields: ["Name", "(SELECT Id, FirstName, LastName FROM Contacts)"]

  2. Child-to-parent query (e.g., Contact with Account details):

    • objectName: "Contact"

    • fields: ["FirstName", "LastName", "Account.Name", "Account.Industry"]

  3. Multiple level query (e.g., Contact -> Account -> Owner):

    • objectName: "Contact"

    • fields: ["Name", "Account.Name", "Account.Owner.Name"]

  4. Related object filtering:

    • objectName: "Contact"

    • fields: ["Name", "Account.Name"]

    • whereClause: "Account.Industry = 'Technology'"

Note: When using relationship fields:

  • Use dot notation for parent relationships (e.g., "Account.Name")

  • Use subqueries in parentheses for child relationships (e.g., "(SELECT Id FROM Contacts)")

  • Custom relationship fields end in "__r" (e.g., "CustomObject__r.Name")

Inputs: fields (required), objectName (required), limit, orderBy, +1 more.

salesforce_read_apexA
Read-only

Read Apex classes from Salesforce.

Examples:

  1. Read a specific Apex class by name: { "className": "AccountController" }

  2. List all Apex classes with an optional name pattern: { "namePattern": "Controller" }

  3. Get metadata about Apex classes: { "includeMetadata": true, "namePattern": "Trigger" }

  4. Use wildcards in name patterns: { "namePattern": "AccountCont" }

Notes:

  • When className is provided, the full body of that specific class is returned

  • When namePattern is provided, all matching class names are returned (without body)

  • Use includeMetadata to get additional information like API version, length, and last modified date

  • If neither className nor namePattern is provided, all Apex class names will be listed

  • Wildcards are supported in namePattern: * (matches any characters) and ? (matches a single character)

Inputs: className, namePattern, includeMetadata.

salesforce_read_apex_triggerA
Read-only

Read Apex triggers from Salesforce.

Examples:

  1. Read a specific Apex trigger by name: { "triggerName": "AccountTrigger" }

  2. List all Apex triggers with an optional name pattern: { "namePattern": "Account" }

  3. Get metadata about Apex triggers: { "includeMetadata": true, "namePattern": "Contact" }

  4. Use wildcards in name patterns: { "namePattern": "Account*" }

Notes:

  • When triggerName is provided, the full body of that specific trigger is returned

  • When namePattern is provided, all matching trigger names are returned (without body)

  • Use includeMetadata to get additional information like API version, object type, and last modified date

  • If neither triggerName nor namePattern is provided, all Apex trigger names will be listed

  • Wildcards are supported in namePattern: * (matches any characters) and ? (matches a single character)

Inputs: namePattern, triggerName, includeMetadata.

salesforce_search_allA
Read-only

Search across multiple Salesforce objects using SOSL (Salesforce Object Search Language).

Examples:

  1. Basic search across all objects: { "searchTerm": "John", "objects": [ { "name": "Account", "fields": ["Name"], "limit": 10 }, { "name": "Contact", "fields": ["FirstName", "LastName", "Email"] } ] }

  2. Advanced search with filters: { "searchTerm": "Cloud*", "searchIn": "NAME FIELDS", "objects": [ { "name": "Account", "fields": ["Name", "Industry"], "orderBy": "Name DESC", "where": "Industry = 'Technology'" } ], "withClauses": [ { "type": "NETWORK", "value": "ALL NETWORKS" }, { "type": "SNIPPET", "fields": ["Description"] } ] }

Notes:

  • Use * and ? for wildcards in search terms

  • Each object can have its own WHERE, ORDER BY, and LIMIT clauses

  • Support for WITH clauses: DATA CATEGORY, DIVISION, METADATA, NETWORK, PRICEBOOKID, SNIPPET, SECURITY_ENFORCED

  • "updateable" and "viewable" options control record access filtering

Inputs: objects (required), searchTerm (required), searchIn, viewable, +2 more.

salesforce_search_objectsA
Read-only

Search for Salesforce standard and custom objects by name pattern. Examples: 'Account' will find Account, AccountHistory; 'Order' will find WorkOrder, ServiceOrder__c etc.

Inputs: searchPattern (required).

salesforce_write_apexA

Create or update Apex classes in Salesforce.

Examples:

  1. Create a new Apex class: { "operation": "create", "className": "AccountService", "apiVersion": "58.0", "body": "public class AccountService { public static void updateAccounts() { /* implementation */ } }" }

  2. Update an existing Apex class: { "operation": "update", "className": "AccountService", "body": "public class AccountService { public static void updateAccounts() { /* updated implementation */ } }" }

Notes:

  • The operation must be either 'create' or 'update'

  • For 'create' operations, className and body are required

  • For 'update' operations, className and body are required

  • apiVersion is optional for 'create' (defaults to the latest version)

  • The body must be valid Apex code

  • The className in the body must match the className parameter

  • Status information is returned after successful operations

Inputs: body (required), className (required), operation (required), apiVersion.

salesforce_write_apex_triggerA

Create or update Apex triggers in Salesforce.

Examples:

  1. Create a new Apex trigger: { "operation": "create", "triggerName": "AccountTrigger", "objectName": "Account", "apiVersion": "58.0", "body": "trigger AccountTrigger on Account (before insert, before update) { /* implementation */ }" }

  2. Update an existing Apex trigger: { "operation": "update", "triggerName": "AccountTrigger", "body": "trigger AccountTrigger on Account (before insert, before update, after update) { /* updated implementation */ }" }

Notes:

  • The operation must be either 'create' or 'update'

  • For 'create' operations, triggerName, objectName, and body are required

  • For 'update' operations, triggerName and body are required

  • apiVersion is optional for 'create' (defaults to the latest version)

  • The body must be valid Apex trigger code

  • The triggerName in the body must match the triggerName parameter

  • The objectName in the body must match the objectName parameter (for 'create')

  • Status information is returned after successful operations

Inputs: body (required), operation (required), triggerName (required), apiVersion, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each tool targets a clearly distinct resource/action pair. Query vs. aggregate query are explicitly disambiguated via cross-references; search objects (metadata) vs. search all (records) are differentiated; Apex class and trigger tools are separate. No genuine overlap.

    Naming Consistency5/5

    All tools consistently use the 'salesforce_' prefix followed by snake_case names with verb-like prefixes (describe, query, search, manage, read, write, execute). Minor deviations like 'aggregate_query' and 'execute_anonymous' still fit the overall predictable pattern.

    Tool Count5/5

    15 tools is at the upper end of the ideal range, but each tool earns its place by covering distinct Salesforce workflows: data querying, DML, metadata management, Apex code, and debug logs. No redundancy or bloat.

    Completeness4/5

    The tool set provides solid lifecycle coverage: record CRUD via dml_records, query and aggregate query, SOSL search, object/field metadata management, Apex class/trigger read/write, and anonymous execution. The main gap is lack of explicit delete operations for metadata (objects, fields, Apex classes/triggers), but execute_anonymous can act as a workaround in some cases.

    Maintenance

    ActivitySlowing
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers