Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
319 changes: 319 additions & 0 deletions mcp-builder-files/salesforce.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
##
## SPDX-FileCopyrightText: 2026 AOT Technologies
## SPDX-License-Identifier: Apache-2.0
##

version: "1"

server:
name: salesforce
description: "Salesforce MCP server for Lead and Contact CRUD via REST API"

spec:
source: "e2e/fixtures/real/salesforce_openapi.yaml"
format: openapi3
base_url: "https://orgfarm-2dddaa3446-dev-ed.develop.my.salesforce.com"
total_endpoints: 8
scoped_endpoints: 8

workflows:
- "Sales reps create and qualify new leads in the CRM"
- "CRM users read and update contact records tied to accounts"
- "Admins delete stale leads or contacts by record ID"

groups:
- name: leads
description: "Lead record creation, retrieval, update, and deletion"
tools:
- tool_name: create_lead
endpoint: POST /services/data/v58.0/sobjects/Lead
description: >
Create a new Lead in Salesforce. Requires LastName and Company.
Returns the new record ID on success. Use Salesforce API field names
(e.g. LastName, Company, Email) in the request body.
response_kind: json
parameters:
- name: LastName
description: "Lead last name (required by Salesforce)."
required: true
location: body
- name: Company
description: "Company name for the lead (required by Salesforce)."
required: true
location: body
- name: FirstName
description: "Lead first name."
required: false
location: body
- name: Title
description: "Job title."
required: false
location: body
- name: Email
description: "Email address."
required: false
location: body
- name: Phone
description: "Primary phone number."
required: false
location: body
- name: MobilePhone
description: "Mobile phone number."
required: false
location: body
- name: Street
description: "Street address."
required: false
location: body
- name: City
description: "City."
required: false
location: body
- name: State
description: "State or province."
required: false
location: body
- name: PostalCode
description: "Postal or ZIP code."
required: false
location: body
- name: Country
description: "Country."
required: false
location: body
- name: Description
description: "Free-text description of the lead."
required: false
location: body
- name: LeadSource
description: "Source of the lead (e.g. Web, Phone Inquiry)."
required: false
location: body
- name: Status
description: "Lead status (e.g. Open - Not Contacted)."
required: false
location: body
- name: Rating
description: "Lead rating (e.g. Hot, Warm, Cold)."
required: false
location: body
- name: Website
description: "Company or personal website URL."
required: false
location: body
- name: NumberOfEmployees
description: "Number of employees at the company."
required: false
location: body
- name: Industry
description: "Industry sector."
required: false
location: body
- name: AnnualRevenue
description: "Annual revenue for the company."
required: false
location: body
hints:
- "Instance URL is org-specific — configure at deploy time."
- "Field names must use Salesforce API names (PascalCase)."

- tool_name: read_lead
endpoint: GET /services/data/v58.0/sobjects/Lead/{id}
description: >
Retrieve a Lead record by Salesforce ID. Returns all accessible
field values for the lead. Record IDs are 15 or 18 alphanumeric
characters.
response_kind: json
parameters:
- name: id
description: "Salesforce Lead record ID (15 or 18 alphanumeric characters)."
required: true
location: path
hints:
- "Record ID format: 15 or 18 alphanumeric characters."

- tool_name: update_lead
endpoint: PATCH /services/data/v58.0/sobjects/Lead/{id}
description: >
Update fields on an existing Lead. Provide at least one field to
change. Uses Salesforce API field names (FirstName, LastName,
Company, Email).
response_kind: json
parameters:
- name: id
description: "Salesforce Lead record ID to update."
required: true
location: path
- name: FirstName
description: "Updated first name."
required: false
location: body
- name: LastName
description: "Updated last name."
required: false
location: body
- name: Company
description: "Updated company name."
required: false
location: body
- name: Email
description: "Updated email address."
required: false
location: body
hints:
- "At least one body field must be provided for the update."
- "Returns 204 No Content on success when no body is returned."

- tool_name: delete_lead
endpoint: DELETE /services/data/v58.0/sobjects/Lead/{id}
description: >
Permanently delete a Lead record by ID. This action cannot be undone
unless your org has a recycle bin retention policy.
response_kind: json
parameters:
- name: id
description: "Salesforce Lead record ID to delete."
required: true
location: path
hints:
- "Returns 204 No Content on success."

- name: contacts
description: "Contact record creation, retrieval, update, and deletion"
tools:
- tool_name: create_contact
endpoint: POST /services/data/v58.0/sobjects/Contact
description: >
Create a new Contact in Salesforce. Requires LastName. Optionally
link to an Account via AccountId. Returns the new record ID on
success.
response_kind: json
parameters:
- name: LastName
description: "Contact last name (required by Salesforce)."
required: true
location: body
- name: FirstName
description: "Contact first name."
required: false
location: body
- name: AccountId
description: >
Salesforce Account ID to associate the contact with (15 or 18
alphanumeric characters).
required: false
location: body
- name: Title
description: "Job title."
required: false
location: body
- name: Email
description: "Email address."
required: false
location: body
- name: Phone
description: "Primary phone number."
required: false
location: body
- name: MobilePhone
description: "Mobile phone number."
required: false
location: body
- name: MailingStreet
description: "Mailing street address."
required: false
location: body
- name: MailingCity
description: "Mailing city."
required: false
location: body
- name: MailingState
description: "Mailing state or province."
required: false
location: body
- name: MailingPostalCode
description: "Mailing postal or ZIP code."
required: false
location: body
- name: MailingCountry
description: "Mailing country."
required: false
location: body
- name: Description
description: "Free-text description."
required: false
location: body
- name: LeadSource
description: "Source of the contact."
required: false
location: body
- name: Department
description: "Department name."
required: false
location: body
hints:
- "AccountId must be a valid Salesforce Account record ID if provided."

- tool_name: read_contact
endpoint: GET /services/data/v58.0/sobjects/Contact/{id}
description: >
Retrieve a Contact record by Salesforce ID. Returns all accessible
field values including account linkage when present.
response_kind: json
parameters:
- name: id
description: "Salesforce Contact record ID (15 or 18 alphanumeric characters)."
required: true
location: path

- tool_name: update_contact
endpoint: PATCH /services/data/v58.0/sobjects/Contact/{id}
description: >
Update fields on an existing Contact. Provide at least one field to
change. AccountId links the contact to a different account when
provided.
response_kind: json
parameters:
- name: id
description: "Salesforce Contact record ID to update."
required: true
location: path
- name: FirstName
description: "Updated first name."
required: false
location: body
- name: LastName
description: "Updated last name."
required: false
location: body
- name: Email
description: "Updated email address."
required: false
location: body
- name: AccountId
description: "Updated Account ID to associate with this contact."
required: false
location: body
hints:
- "At least one body field must be provided for the update."

- tool_name: delete_contact
endpoint: DELETE /services/data/v58.0/sobjects/Contact/{id}
description: >
Permanently delete a Contact record by ID. This action cannot be
undone unless your org has a recycle bin retention policy.
response_kind: json
parameters:
- name: id
description: "Salesforce Contact record ID to delete."
required: true
location: path

auth:
type: api_key
notes: >
Salesforce REST API expects a Bearer access token in the Authorization
header. Token refresh (OAuth2 refresh_token grant) must be handled
outside this MCP server — e.g. ToolHive secret injection or an external
token service. Set the org instance URL via server configuration at
deploy time (base_url is org-specific).
Loading
Loading