← Salesforce MCP Server

Salesforce MCP Server 0.8.2

npm · @aaronsb/salesforce-cloud-mcp · current release

18
Tools
13
Resources
2
Templates
0
Prompts

Observation

Observed 2026-08-31T20:02:32.415Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.

Server capabilities
{
  "tools": {},
  "resources": {
    "listChanged": true
  }
}

Tools 18

ToolCategoryAnnotationsRisk
analyzeRun analytics on any Salesforce object — group by categorical fields, aggregate numeric fields, and compute custom expressions. Uses field-type metadata for validation.
Input schema
{
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "description": "Salesforce object API name (e.g., Opportunity, Account, Lead)"
    },
    "filter": {
      "type": "string",
      "description": "SOQL WHERE clause (e.g., \"StageName = 'Closed Won' AND Amount > 100000\")"
    },
    "groupBy": {
      "type": "string",
      "description": "Field to group by (must be picklist, boolean, or similar categorical field)"
    },
    "compute": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Computed expressions (max 5). Format: name = expr. E.g., [\"win_rate = won / total * 100\"]"
    },
    "maxGroups": {
      "type": "number",
      "description": "Max groups to return (default: 20)"
    }
  },
  "required": [
    "object"
  ]
}
— · —
analyze_conversationAnalyze conversation activity and engagement patterns for an opportunity. Extracts insights from Gong calls, emails, and other activities to provide engagement recommendations.
Input schema
{
  "type": "object",
  "properties": {
    "opportunityId": {
      "type": "string",
      "description": "The ID of the Salesforce opportunity to analyze conversation activity for"
    }
  },
  "required": [
    "opportunityId"
  ]
}
— · —
batchExecute multiple operations in a single call with result references. Use $N.field to reference prior results (e.g., $0.id for the ID from operation 0). Destructive operations require confirm: true.
Input schema
{
  "type": "object",
  "properties": {
    "operations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string",
            "description": "Tool name to execute (e.g., create_record, update_record, execute_soql)"
          },
          "args": {
            "type": "object",
            "description": "Arguments for the tool. Use $N.field to reference results from earlier operations."
          },
          "confirm": {
            "type": "boolean",
            "description": "Required for delete operations. Set to true to confirm destructive action."
          }
        },
        "required": [
          "tool",
          "args"
        ]
      },
      "description": "List of operations to execute sequentially (max 16)"
    },
    "onError": {
      "type": "string",
      "enum": [
        "bail",
        "continue"
      ],
      "description": "Error handling: bail (default) stops on first failure, continue executes remaining"
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ],
      "description": "Response detail level (default: summary)"
    }
  },
  "required": [
    "operations"
  ]
}
— · —
create_recordCreate a new record in Salesforce. Supports both standard and custom fields in the data object.
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the Salesforce object"
    },
    "data": {
      "type": "object",
      "description": "Record data as key-value pairs. For custom fields, use the API name with __c suffix (e.g., { \"Name\": \"Test\", \"Custom_Field__c\": \"Value\" })"
    }
  },
  "required": [
    "objectName",
    "data"
  ]
}
— · —
delete_recordDelete a record from Salesforce
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the Salesforce object"
    },
    "recordId": {
      "type": "string",
      "description": "ID of the record to delete"
    }
  },
  "required": [
    "objectName",
    "recordId"
  ]
}
— · —
describe_objectGet an object's full metadata, including every standard and custom field when includeFields is true. Returns the complete schema — exhaustive but unranked, and large on customised objects. To find out which fields this org actually populates, read `salesforce://field-catalog/{objectName}` instead; it is ranked and far smaller.
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the Salesforce object"
    },
    "includeFields": {
      "type": "boolean",
      "description": "Whether to include field metadata (default: false). When true, returns all available fields including custom fields, their types, and relationships."
    },
    "pageSize": {
      "type": "number",
      "description": "Number of fields per page when includeFields is true (default: 50)"
    },
    "pageNumber": {
      "type": "number",
      "description": "Page number to retrieve when includeFields is true (default: 1)"
    },
    "intent": {
      "type": "string",
      "enum": [
        "pipeline",
        "engagement",
        "forecasting",
        "reporting",
        "contact-mapping"
      ],
      "description": "Business intent — filters fields to only those relevant for this use case."
    }
  },
  "required": [
    "objectName"
  ]
}
— · —
download_fileDownload a file from Salesforce. Accepts a ContentVersionId (068...) or ContentDocumentId (069...). Saves to a sandboxed workspace directory (default: ~/.local/share/salesforce-cloud-mcp/workspace/, configurable via SF_WORKSPACE_DIR). Text files (CSV, JSON, XML, TXT, etc.) also return content inline. Binary files return the saved path.
Input schema
{
  "type": "object",
  "properties": {
    "contentId": {
      "type": "string",
      "description": "ContentVersionId (068...) or ContentDocumentId (069...). Find these by querying ContentDocumentLink: SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = '<recordId>'"
    }
  },
  "required": [
    "contentId"
  ]
}
— · —
enrich_opportunityEnrich an opportunity with market intelligence, industry insights, and strategic recommendations based on similar deal patterns and best practices.
Input schema
{
  "type": "object",
  "properties": {
    "opportunityId": {
      "type": "string",
      "description": "The ID of the Salesforce opportunity to enrich with intelligence"
    },
    "includeCompetitiveIntel": {
      "type": "boolean",
      "description": "Whether to include competitive intelligence analysis (default: false)"
    },
    "includeBestPractices": {
      "type": "boolean",
      "description": "Whether to include industry-specific best practices (default: true)"
    }
  },
  "required": [
    "opportunityId"
  ]
}
— · —
execute_soqlExecute a SOQL query. Supports both standard and custom fields (custom fields end with __c in their API names). To see which fields this org actually populates on an object, read the `salesforce://field-catalog/{objectName}` resource — it is ranked, far smaller than a full schema, and works for any object. That catalog is a usage filter rather than a field list: standard fields remain queryable whether or not they appear in it. Use describe_object when you want an object's complete schema.
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "SOQL query to execute. For custom fields, use the API name (e.g., Project_Status__c)"
    },
    "pageSize": {
      "type": "number",
      "description": "Number of records per page (default: 25)"
    },
    "pageNumber": {
      "type": "number",
      "description": "Page number to retrieve (default: 1)"
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ],
      "description": "Response detail level (default: summary)"
    }
  },
  "required": [
    "query"
  ]
}
— · —
find_similar_opportunitiesFind opportunities similar to a reference opportunity or based on specific criteria. Includes pattern analysis and similarity scoring to identify market trends and success patterns.
Input schema
{
  "type": "object",
  "properties": {
    "referenceOpportunityId": {
      "type": "string",
      "description": "Optional reference opportunity ID to find similar deals based on its characteristics"
    },
    "industry": {
      "type": "string",
      "description": "Filter by industry (e.g., \"Information Technology & Services\")"
    },
    "minAmount": {
      "type": "number",
      "description": "Minimum opportunity amount"
    },
    "maxAmount": {
      "type": "number",
      "description": "Maximum opportunity amount"
    },
    "stage": {
      "type": "string",
      "description": "Filter by opportunity stage (e.g., \"Closed Won\", \"Proposal\")"
    },
    "isWon": {
      "type": "boolean",
      "description": "Filter by won/lost status"
    },
    "closeDateStart": {
      "type": "string",
      "description": "Start date for close date range (YYYY-MM-DD)"
    },
    "closeDateEnd": {
      "type": "string",
      "description": "End date for close date range (YYYY-MM-DD)"
    },
    "includeAnalysis": {
      "type": "boolean",
      "description": "Whether to include pattern analysis and insights (default: true)"
    },
    "limit": {
      "type": "number",
      "description": "Maximum number of results to return (default: 50)"
    }
  }
}
— · —
generate_business_caseGenerate a markdown business case report for an opportunity. Fetches opportunity details, contacts, conversation insights, and similar won deals to produce a complete report.
Input schema
{
  "type": "object",
  "properties": {
    "opportunityId": {
      "type": "string",
      "description": "The ID of the Salesforce opportunity to generate a business case for"
    },
    "clientName": {
      "type": "string",
      "description": "Optional client name to override the account name in the report title"
    }
  },
  "required": [
    "opportunityId"
  ]
}
— · —
get_opportunity_detailsGet detailed information about a Salesforce opportunity including all available fields (both standard and custom), related records, and metadata
Input schema
{
  "type": "object",
  "properties": {
    "opportunityId": {
      "type": "string",
      "description": "The ID of the Salesforce opportunity to retrieve details for"
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ],
      "description": "Response detail level (default: full)"
    },
    "intent": {
      "type": "string",
      "enum": [
        "pipeline",
        "engagement",
        "forecasting",
        "reporting",
        "contact-mapping"
      ],
      "description": "Business intent — selects relevant fields automatically. Omit for all fields."
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Explicit field names to return. Overrides intent if both provided."
    }
  },
  "required": [
    "opportunityId"
  ]
}
— · —
get_user_infoGet information about the current user
Input schema
{
  "type": "object",
  "properties": {}
}
— · —
list_objectsList all available Salesforce objects, including both standard and custom objects
Input schema
{
  "type": "object",
  "properties": {
    "pageSize": {
      "type": "number",
      "description": "Number of objects per page (default: 25)"
    },
    "pageNumber": {
      "type": "number",
      "description": "Page number to retrieve (default: 1)"
    }
  }
}
— · —
opportunity_insightsGenerate detailed insights and analytics from opportunity data including pipeline health, performance metrics, industry trends, and strategic recommendations.
Input schema
{
  "type": "object",
  "properties": {
    "timeframe": {
      "type": "string",
      "description": "Time period for analysis",
      "enum": [
        "current_quarter",
        "last_quarter",
        "current_year",
        "last_year",
        "all_time"
      ]
    },
    "includeStageAnalysis": {
      "type": "boolean",
      "description": "Include stage distribution and conversion analysis (default: true)"
    },
    "includeOwnerPerformance": {
      "type": "boolean",
      "description": "Include individual owner performance metrics (default: true)"
    },
    "includeIndustryTrends": {
      "type": "boolean",
      "description": "Include industry-specific performance trends (default: true)"
    },
    "includePipelineHealth": {
      "type": "boolean",
      "description": "Include pipeline health and timing analysis (default: true)"
    },
    "includeConversionRates": {
      "type": "boolean",
      "description": "Include stage conversion rate analysis (default: true)"
    },
    "minAmount": {
      "type": "number",
      "description": "Minimum opportunity amount for analysis"
    },
    "maxAmount": {
      "type": "number",
      "description": "Maximum opportunity amount for analysis"
    },
    "industry": {
      "type": "string",
      "description": "Filter analysis to specific industry"
    },
    "owner": {
      "type": "string",
      "description": "Filter analysis to specific owner"
    }
  }
}
— · —
search_fieldsFind the field(s) that carry a concept, when you know what you want to query but not the API name. Searches every scored field on the discovered objects — not just the promoted ones — across API names, labels, and help text, ranked by match strength. Searches the core objects by default; pass objectName to scope to one, which discovers it on demand. Set includeValues to get the value set for matched picklists, so you can write the WHERE clause without a second lookup. The match is lexical, not semantic: it finds fields whose name, label or help text contains the term, so a concept this org names differently will not surface, and an object that has not been discovered is not searched. Read `salesforce://field-catalog/{objectName}/all` to browse everything on an object.
Input schema
{
  "type": "object",
  "properties": {
    "term": {
      "type": "string",
      "description": "What to look for, matched against field API names, labels, and help text (e.g. \"ai\", \"renewal date\", \"region\")"
    },
    "objectName": {
      "type": "string",
      "description": "Restrict the search to one object (e.g. Opportunity). Omit to search all discovered core objects."
    },
    "includeValues": {
      "type": "boolean",
      "description": "Include the active value set for matched picklist fields (default: false). Free — the values come from metadata already discovered."
    },
    "minPopulationPct": {
      "type": "number",
      "description": "Drop fields populated on fewer than this percent of records (0-100). Omit to include sparsely-populated fields, which is often where custom flags live."
    },
    "limit": {
      "type": "number",
      "description": "Maximum matches to return (default: 25, max: 100)"
    }
  },
  "required": [
    "term"
  ]
}
— · —
search_opportunitiesSearch for Salesforce opportunities by name, account, and stage. Returns matching opportunities ordered by close date. Results include both standard and custom fields.
Input schema
{
  "type": "object",
  "properties": {
    "namePattern": {
      "type": "string",
      "description": "Pattern to match in Opportunity Name. Example: \"Github\" will match \"Github Migration\" or \"My Github Project\"."
    },
    "accountNamePattern": {
      "type": "string",
      "description": "Pattern to match in Account Name. Example: \"Ford\" will match opportunities for \"Ford\" or \"Ford Motor Company\"."
    },
    "stage": {
      "type": "string",
      "description": "Exact match for opportunity stage. Common values: \"Proposal\", \"Qualification\", \"Negotiation\", \"Closed Won\", \"Closed Lost\"."
    },
    "pageSize": {
      "type": "number",
      "description": "Number of records per page (default: 25)"
    },
    "pageNumber": {
      "type": "number",
      "description": "Page number to retrieve (default: 1)"
    },
    "detail": {
      "type": "string",
      "enum": [
        "summary",
        "full"
      ],
      "description": "Response detail level (default: summary)"
    }
  }
}
— · —
update_recordUpdate an existing record in Salesforce. Supports updating both standard and custom fields.
Input schema
{
  "type": "object",
  "properties": {
    "objectName": {
      "type": "string",
      "description": "API name of the Salesforce object"
    },
    "recordId": {
      "type": "string",
      "description": "ID of the record to update"
    },
    "data": {
      "type": "object",
      "description": "Record data to update as key-value pairs. For custom fields, use the API name with __c suffix (e.g., { \"Custom_Field__c\": \"New Value\" })"
    }
  },
  "required": [
    "objectName",
    "recordId",
    "data"
  ]
}
— · —

Resources 13

Resource templates 2

Prompts 0

Let’s talk about MCP security.

Share your details and our security team will contact you.