Salesforce CLI MCP服务器

这是什么
Salesforce CLI MCP Server v2.0是一个模型上下文协议(MCP)服务器,它使AI助手能够通过基于项目的CLI集成与Salesforce组织进行交互。它提供的工具允许AI模型使用您的本地Salesforce DX项目配置执行Apex代码、查询数据、描述对象和管理Salesforce组织。
备注:这是从您的存储库运行的本地MCP服务器。它不是通过NPM分发的。\*适用于Mac,尚未在Windows/Linux上验证!
安装
先决条件
- Salesforce命令行界面(
sf)已安装并配置 - 至少一个经过身份验证的Salesforce组织
- Git(克隆此存储库)
安装说明
- 克隆存储库:
git clone https://github.com/perrynet/salesforce-cli-mcp-server.git
cd salesforce-cli-mcp-server- 安装依赖项并构建:
npm install
npm run build- 编译后的服务器将在
build/index.js
将MCP配置添加到您的客户端
要使用此MCP服务器,您需要一个支持MCP协议的客户端。使用指向本地服务器的命令对其进行配置。
与Claude Desktop一起使用
- 安装 克劳德桌面 来自Anthropic。
- 克隆此存储库并运行
npm install && npm run build(请参阅上面的安装说明)。
- 在以下位置编辑配置文件:
- 雨衣: ~/Library/Application\ Support/Claude/claude_desktop_config.json - 窗户: C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\Claude\\claude_desktop_config.json
> 如果你找不到文件。 打开Claude Desktop,打开设置菜单,转到开发人员部分,然后单击服务器部分内的编辑配置。
- 将以下内容添加到您的配置文件中
"mcpServers"钥匙(更换/path/to/repo使用实际路径):
{
"mcpServers": {
"perrynet@salesforce-cli-server": {
"command": "node",
"args": ["/path/to/repo/salesforce-mcp-server/build/index.js"]
}
}
}- 重新启动Claude Desktop(退出并重新打开应用程序)。现在,您可以在Claude Desktop中使用MCP。
与Claude Code一起使用
- 安装 克劳德代码.
- 克隆此存储库并运行
npm install && npm run build.
- 在终端中执行以下命令(替换
/path/to/repo使用实际路径):
claude mcp add perrynet@salesforce-cli-server node /path/to/repo/salesforce-mcp-server/build/index.js这将MCP服务器添加到用户范围中,以便跨所有项目进行全局访问。
与Codex CLI一起使用
克隆此存储库并构建服务器。然后通过添加以下命令来配置Codex CLI mcp服务器 部分在 ~/.codex/config.toml (替换 /path/to/repo 使用实际路径):
[mcp_servers.perrynet@salesforce-cli-server]
command = "node"
args = ["/path/to/repo/salesforce-mcp-server/build/index.js"]与VS代码一起使用
- 克隆此存储库并运行
npm install && npm run build. - 在VS Code中,按打开命令面板
Command + Shift + P或Ctrl + Shift + P. - 键入“MCP添加”,选择
MCP: Add Server选项。 - 选择
Command(stdio)选项。 - 输入命令:
node - 输入参数:
/path/to/repo/salesforce-mcp-server/build/index.js(替换为实际路径) - 对于MCP服务器Id
perrynet@salesforce-cli-server. - 选择其中之一
Global或Workspace安装选项。
替代方案:GitHub Copilot的工作区特定配置
如果你想为特定的VS Code工作区配置MCP服务器(对GitHub Copilot集成有用),请创建或编辑 .vscode/mcp.json 在工作区根目录中(替换 /path/to/repo 实际路径):
{
"mcpServers": {
"perrynet@salesforce-cli-server": {
"command": "node",
"args": [
"/path/to/repo/salesforce-mcp-server/build/index.js"
]
}
}
}此配置:
- ✅ 在VS Code的GitHub Copilot Chat中启用Salesforce工具
- ✅ 适用于特定的工作空间/项目
- ✅ 打开工作区时自动激活
- ✅ 无需全局配置
创建文件后,重新加载VS Code或重新启动Copilot扩展以使更改生效。
与光标一起使用
- 安装 光标
- 打开它并创建您的帐户,然后连接到模型提供商
- 打开
Cursor->Settings->Cursor Settings->Mcp
Add new global MCP Server
- 这将使您进入JSON配置的编辑器。填写密钥的值
salesforce-cli-mcp:
{
"mcpServers": {
"salesforce-cli-mcp": {
"command": "npx",
"args": ["salesforce-cli-mcp"]
}
}
}> 如果mcpServer下有任何现有密钥,请不要删除它们。将salesforce-cli-mcp添加到末尾。
- 保存文件。回到
Cursor Settings选项卡。您应该看到salesforce-cli-mcp已列出,圆点应该变为绿色。
- 打开
Composer查看和切换normal到agent(输入底部的小文本)
- 您现在可以使用工具
配置
基于项目的身份验证
Salesforce MCP Server v2.0使用 基于项目的身份验证模型这意味着:
- 不需要环境变量 -服务器使用您的本地Salesforce DX项目配置
- 所有工具都需要
sourcePath参数 -这是Salesforce DX项目目录的绝对路径 - 用途
.sf/config.json-服务器从您的项目中读取组织身份验证.sf目录 - 基于文件系统的访问控制 -访问权限由项目目录上的文件权限控制
需求
为了使服务器正常工作,您需要:
- 有效的Salesforce DX项目结构 带着一个
.sf目录 - 经过身份验证的组织 在项目中配置(通过
sf org login或默认组织设置) - Salesforce CLI已安装 并可在您的PATH中访问
项目结构示例
/Users/yourname/sf-projects/my-salesforce-app/
├── .sf/
│ └── config.json # Contains org configuration
├── force-app/
│ └── main/
│ └── default/
├── sfdx-project.json
└── ...使用工具时,您将提供项目路径:
sourcePath: "/Users/yourname/sf-projects/my-salesforce-app"目标组织选择
大多数工具都接受可选 targetOrg 参数:
- 如果提供:使用指定的组织别名或用户名
- 如果省略:使用项目中配置的默认组织
.sf/config.json
这使您可以灵活地与同一项目中的多个组织合作。
身份验证设置
在使用MCP服务器之前,请确保您的Salesforce DX项目已正确配置:
# Navigate to your Salesforce DX project
cd /path/to/your/salesforce-project
# Login to your org (if not already authenticated)
sf org login web --alias my-dev-org
# Set as default org (optional)
sf config set target-org my-dev-org
# Verify authentication
sf org list一旦通过身份验证,MCP服务器将在您提供项目路径时使用此配置。
如何使用它
在您的AI客户端中配置SF MCP服务器后,您可以使用自然语言与Salesforce进行交互。AI助手将可以使用36个强大的工具:
可用工具
1.列出连接的Salesforce组织
查看当前已通过Salesforce CLI身份验证的所有Salesforce组织。
示例提示:
- “显示所有连接的Salesforce组织”
- “列出我可用的Salesforce组织”
- “我可以访问哪些Salesforce组织?”
2.列出组织中的对象
检索特定Salesforce组织中可用的所有标准和自定义对象。
示例提示:
- “列出我的开发组织中的所有自定义对象”
- “显示生产组织中的所有对象”
- “沙盒1中存在哪些自定义对象?”
3.描述一个对象
获取特定Salesforce对象的详细元数据,包括字段、关系和属性。
示例提示:
- “描述我组织中的Account对象”
- “显示开发组织中Custom_Object\_\_c上的所有字段”
- “Contact对象上的关系是什么?”
4.执行Apex代码
直接在Salesforce组织中运行匿名Apex代码,并查看调试输出。
示例提示:
- “在我的开发组织中执行此Apex:System.debug('Hello World');”
- “在Apex中运行查询以统计所有帐户”
- “执行Apex代码以创建测试帐户记录”
5.查询记录
执行SOQL查询并以JSON格式检索结果。
示例提示:
- “查询我所在组织的前10个帐户”
- “查找电子邮件域为'@example.com'的所有联系人”
- “本月关闭金额超过10000美元的机会”
- “查询今天创建的所有案例记录”
6.查询要归档的记录
执行SOQL查询并将结果保存到CSV或JSON文件。
示例提示:
- “将所有线索导出到CSV文件”
- “将2024年第四季度的所有商机保存到JSON文件中”
- “创建帐户及其相关联系人的CSV导出”
7.运行Apex测试
使用各种选项执行Apex测试类,包括测试级别和代码覆盖率。
示例提示:
- “运行我的开发组织中的所有测试”
- “使用代码覆盖率执行AccountTriggerTest类”
- “运行所有本地测试,不包括托管包”
8.获取Apex测试结果
检索以前异步Apex测试运行的结果。
示例提示:
- “获取测试运行ID 707xx0000000001的结果”
- “显示上次测试运行的代码覆盖率”
9.获得Apex代码覆盖率
获取Salesforce组织的代码覆盖率信息。
示例提示:
- “我的组织中的总体代码覆盖率是多少?”
- “显示最新测试运行的代码覆盖率”
10.生成Apex类
为新的Apex类生成元数据源文件。
示例提示:
- “生成一个名为AccountHelper的新Apex类”
- “创建一个名为MyCustomController的Apex控制器类”
- “在classes目录中生成一个名为DataCleanupBatch的批处理类”
11.生成顶点触发器
为新的Apex触发器生成元数据源文件。
示例提示:
- “为Account对象生成一个名为AccountTrigger的触发器”
- “为Contact对象创建插入前触发器”
- “为MyCustomObject\_\_c生成更新后触发器”
12.列出Apex日志
从组织中获取并列出Apex调试日志。
示例提示:
- “显示我的开发组织中的所有Apex调试日志”
- “列出生产中最近的调试日志”
- “获取沙盒中调试日志的ID”
13.获取Apex日志
从组织中获取特定的Apex调试日志或最近的日志。
示例提示:
- “获取ID为07L的调试日志…”
- “显示我所在组织的最后5个调试日志”
- “从生产环境中获取最新的调试日志”
14.登录Salesforce组织
通过web浏览器验证并登录Salesforce组织。
示例提示:
- “使用别名'prod'登录到新的生产组织”
- “连接到别名为“dev sandbox”的沙盒”
15.运行代码分析器
使用可配置规则分析代码,以确保良好的编码实践。
示例提示:
- “在所有Apex类上运行代码分析器”
- “分析我的Lightning Web组件的安全问题”
- “检查强制应用程序目录上的PMD规则”
16.列表代码分析器规则
列出代码分析的可用规则。
示例提示:
- “显示所有可用的代码分析器规则”
- “列出与安全相关的代码分析规则”
- “有哪些ESLint规则可用?”
17.扫描仪运行
使用多个引擎扫描具有各种安全和质量规则的代码库。
示例提示:
- “扫描所有Apex文件以查找安全漏洞”
- “在我的代码库上运行PMD和ESLint扫描程序”
- “检查我的JavaScript文件中是否存在退役js漏洞”
- “使用高严重性阈值进行扫描并将结果保存到CSV”
18.扫描仪运行DFA
运行Salesforce Graph Engine进行数据流分析,以识别复杂的安全问题。
示例提示:
- “在我的Apex控制器上运行数据流分析”
- “使用图形引擎检查SOQL注入漏洞”
- “对所有Apex类执行基于路径的安全分析”
- “在启用试点规则的情况下运行DFA”
19.分配权限集
将权限集分配给一个或多个组织用户。
示例提示:
- “将DreamHouse权限集分配给我的开发组织中的管理员用户”
- “授予CloudHouse和AppBuilder权限集user@example.com"
- “为沙盒中的用户列表分配多个权限集”
20.分配权限集许可证
为组织用户分配权限集许可证。
示例提示:
- “将Sales Cloud许可证分配给user@example.com"
- “向多个用户授予服务云权限集许可证”
- “将平台事件许可证分配给管理员用户”
21.显示用户
显示Salesforce用户的信息,包括个人资料、组织ID和访问详细信息。
示例提示:
- “显示我组织中管理员用户的信息”
- “显示用户详细信息user@example.com"
- “获取当前用户的配置文件和访问令牌”
22.列表元数据
列出指定类型的元数据组件和属性。
示例提示:
- “列出我组织中的所有CustomObject组件”
- “显示Sales文件夹中的所有仪表板组件”
- “使用API版本60.0获取所有EmailTemplate元数据”
- “列出布局组件并保存到文件”
23.列出元数据类型
显示为您的组织启用的所有元数据类型的详细信息。
示例提示:
- “显示我组织中所有可用的元数据类型”
- “列出用于创建package.xml的元数据类型”
- “使用API版本60.0获取所有启用的元数据类型”
- “显示元数据类型并保存到文件以供参考”
24.注销
退出Salesforce组织,删除存储的身份验证。
示例提示:
- “退出我的开发组织”
- “删除沙盒1的身份验证”
- “从所有连接的组织中注销”
25.打开
在浏览器中打开Salesforce组织。
示例提示:
- “在Chrome中打开我的开发组织”
- “在我的沙盒中打开闪电体验页面”
- “以私人/匿名模式打开我的组织”
- “在生产中打开Visualforce页面/apex/MyPage”
- “在Lightning App Builder中打开我的FlexiPage”
26.开放记录
在浏览器中打开特定的Salesforce记录。
示例提示:
- “在我的开发组织中打开记录001XX0000XXXXX”
- “导航到生产中的帐户记录001…”
- “在浏览器中显示联系人记录003…”
27.创建记录
使用REST API在Salesforce组织中创建一个新记录。
示例提示:
- “创建一个名为‘Acme Corp’并键入‘Customer’的新帐户”
- “插入一条联系人记录,名字为‘John’,姓氏为‘Doe’”
- “创建主题为“技术问题”且优先级为“高”的案例”
- “通过公司‘技术创业’和电子邮件添加新的Lead”lead@example.com'"
28.更新记录
使用REST API更新Salesforce组织中的现有记录。
示例提示:
- “更新帐户001XX…将BillingCity设置为‘旧金山’”
- “将商机006XX…的状态更改为‘已关闭的韩元’”
- “用电话‘(555)123-4567’更新联系人003XX…”
- “修改案例500XX…将优先级设置为‘关键’”
29.删除记录
使用REST API从Salesforce组织中删除记录。
示例提示:
- “删除帐户记录001XX…”
- “从组织中删除联系人003XX…”
- “删除潜在客户记录00QXX…”
- “删除测试用例记录500XX…”
30.包装安装
在Salesforce组织中安装或升级软件包版本。
示例提示:
- “在我的开发组织中安装包04tXXXXXXXXXXXXXX”
- “升级ID为04t的包…在生产环境中等待10分钟”
- “在沙盒中安装密钥为'mykey123'的受保护包”
- “安装包并仅编译包Apex代码”
- “升级解锁的软件包并弃用已删除的组件”
31.卸载软件包
从Salesforce组织卸载第二代软件包。
示例提示:
- “从我的开发组织卸载包04tXXXXXXXXXXXXXX”
- “从生产环境中删除别名为'old_package'的包”
- “卸载程序包并等待5分钟完成”
- “从沙盒中删除别名中有空格的包”
32.模式生成选项卡
为自定义对象上的新自定义选项卡生成元数据源文件。
示例提示:
- “在tabs目录中为MyObject\_\_c创建一个带有图标54的选项卡”
- “为Invoice\_\_c对象生成一个带有图标25的自定义选项卡”
- “为Customer\_\_c添加一个导航选项卡,图标75位于app/main/default/tabs中”
- “使用默认图标为Product\_\_c自定义对象创建选项卡”
33.搜索记录
跨多个对象执行基于SOSL文本的搜索。这是在Salesforce组织中查找提及或包含特定文本的记录的主要工具。
示例提示:
- “在所有姓名字段中搜索‘Anna Jones’”
- “在所有对象中查找包含‘Acme’的记录”
- “在联系人和潜在客户中搜索电话号码‘415-555-1234’”
- “查找所有在客户、机会和案例中提到我们的竞争对手‘Acme Corp’的记录”
- “执行SOSL:在所有领域找到{Smith}返回联系人、负责人”
34.生成闪电组件
使用可配置的模板和输出目录生成Lightning Web组件(LWC)或Aura组件。
示例提示:
- “生成一个名为AccountList的闪电网络组件”
- “在组件目录中创建一个名为ContactForm的Aura组件”
- “使用名为SalesMetrics的analyticsDashboard模板生成LWC”
- “使用默认模板创建Lightning组件MyCustomView”
35.将元数据部署到组织
使用各种配置选项(包括测试执行)将元数据组件部署到Salesforce组织。
示例提示:
- “将所有元数据从强制应用目录部署到我的开发组织”
- “使用所有测试验证部署到生产环境,但不保存(模拟运行)”
- “将与‘Account\*’模式匹配的特定Apex类部署到沙盒”
- “使用package.xml清单和RunLocalTests进行部署”
- 部署元数据并运行特定的测试类:TestClass1、TestClass2
实例
示例1:数据分析
User: "I need to analyze our customer data. First, show me what custom objects we have in the production org."
AI: [Lists all custom objects]
User: "Great! Now query all Customer__c records created this year and export them to CSV."
AI: [Executes query and creates CSV file]示例2:调试
User: "I'm having issues with a trigger. Can you execute this Apex to test it:
List accs = [SELECT Id, Name FROM Account LIMIT 5];
for(Account a : accs) {
System.debug('Account: ' + a.Name);
}"
AI: [Executes the code and shows debug logs]示例3:架构文档
User: "I need to document our data model. Can you describe the Order__c object including all its fields and relationships?"
AI: [Provides detailed object metadata]最佳结果提示
- 提供您的项目路径:使用AI助手时,请提及您的Salesforce DX项目目录:
- “在/Users/myname/sfdx projects/my app中使用我的Salesforce项目” - “在~/workspace/salesforce应用程序中处理项目” - AI将使用此路径进行所有后续工具调用
- 指定目标组织 (可选):说明要使用哪个组织别名,或依赖项目的默认组织:
- “从我的开发沙盒组织查询帐户” - “在生产组织中运行测试” - 如果省略,则使用项目的默认组织配置
- 具体询问:为SOQL查询提供字段名称和条件
- 好:“查询类型为'客户'的帐户记录,并显示Id、名称和CreatedDate” - 不太具体:“获取一些帐户”
- 对象名称:您可以使用用户友好的名称或API名称-AI助手将使用描述工具找到正确的API名称
- 两者都可以:“查询自定义对象记录”或“查询Custom_Object\_\_c记录” - 助手也会自动解析字段名
- Apex代码格式:提供Apex代码时,可以使用代码块或内联代码
- 文件导出:导出查询结果时指定格式(CSV或JSON)
故障排除
项目路径问题
“路径不存在” 或 “不是目录”:
- 验证路径是否正确和绝对(例如。,
/Users/name/projects/my-sf-app,不~/projects/my-sf-app) - 确保您对该目录具有读取权限
- 检查路径中的拼写错误
“找不到.sf目录”:
- 您的项目必须具有
.sf目录与config.json - 跑
sf org list在项目目录中初始化.sf目录 - 确保您指向的是项目根目录,而不是子目录
“路径为空”:
- 这
sourcePath大多数工具都需要参数 - 提供Salesforce DX项目目录的绝对路径
身份验证问题
“未找到经过身份验证的组织” 或 “未找到组织”:
- 跑
sf org login web在项目目录中进行身份验证 - 验证身份验证
sf org list - 检查您的访问令牌是否未过期
“访问/刷新令牌过期”:
- 重新验证:
sf org login web --alias my-org - 某些组织需要定期重新身份验证
一般问题
“找不到对象”:
- 验证对象是否存在,并且您正在使用正确的API名称
- 使用
sobject_list查看所有可用对象的工具
“查询错误”:
- 检查您的SOQL语法和字段名
- 使用
sobject_describe查看可用字段的工具
“Apex执行失败”:
- 查看调试日志中的特定错误消息
- 确保您在组织中拥有适当的权限
“找不到命令:sf”:
- 安装Salesforce CLI:https://developer.salesforce.com/tools/salesforcecli
- 确保
sf在您的系统PATH中 - 安装CLI后重新启动AI客户端
安全考虑
- 服务器使用经过身份验证的Salesforce用户的权限执行命令
- 在生产组织中执行DML操作时要小心
- 执行前检查Apex代码,特别是在生产环境中
- 考虑使用沙盒组织进行测试和开发
