SF-MCP 工具
将 Salesforce CLI 功能暴露给像 Claude Desktop 这样的 LLM 工具,允许人工智能代理通过自然语言执行 Salesforce 命令、管理组织、部署代码和查询数据。
服务介绍
Salesforce CLI MCP 服务器
为像 Claude Desktop 这样的 LLM 工具提供 Salesforce CLI 功能的 Model Context Protocol (MCP) 服务器。
概述
该 MCP 服务器封装了 Salesforce CLI (sf) 命令行工具,并将其命令作为 MCP 工具和资源公开,允许由 LLM 驱动的代理执行以下操作:
- 查看有关 Salesforce CLI 主题和命令的帮助信息
- 使用适当的参数执行 Salesforce CLI 命令
- 在 AI 工作流中利用 Salesforce CLI 功能
要求
- Node.js 18+ 和 npm
- 安装并配置好 Salesforce CLI (
sf) - 在 CLI 中配置您的 Salesforce 组织凭据
安装
# Clone the repository
git clone <repository-url>
cd sfMcp
# Install dependencies
npm install
使用
启动服务器
# Basic usage
npm start
# With project roots
npm start /path/to/project1 /path/to/project2
# or using the convenience script
npm run with-roots /path/to/project1 /path/to/project2
# As an npx package with roots
npx -y codefriar/sf-mcp /path/to/project1 /path/to/project2
MCP 服务器使用 stdio 传输方式,可以与如 MCP Inspector 或 Claude Desktop 等 MCP 客户端一起使用。
在 Claude Desktop 中配置
要在 Claude Desktop 的 .claude.json 配置文件中配置此 MCP:
{
"tools": {
"salesforce": {
"command": "/path/to/node",
"args": [
"/path/to/sf-mcp/build/index.js",
"/path/to/project1",
"/path/to/project2"
]
}
}
}
直接使用 npm 包:
{
"tools": {
"salesforce": {
"command": "/path/to/npx",
"args": [
"-y",
"codefriar/sf-mcp",
"/path/to/project1",
"/path/to/project2"
]
}
}
}
开发
# Watch mode (recompiles on file changes)
npm run dev
# In another terminal
npm start [optional project roots...]
可用工具和资源
该 MCP 服务器将 Salesforce CLI 命令作为 MCP 工具提供。它自动发现并注册所有可用的 Salesforce CLI 命令,并特别实现了最常用的命令。
核心工具
sf_version- 获取 Salesforce CLI 版本信息sf_help- 获取 Salesforce CLI 命令的帮助信息sf_cache_clear- 清除命令发现缓存sf_cache_refresh- 刷新命令发现缓存
项目目录管理(根目录)
对于需要 Salesforce 项目上下文(如部署)的命令,您必须指定项目目录。
MCP 支持多个项目目录(根目录),类似于文件系统 MCP。
配置方法
方法 1:通过命令行参数
# Start the MCP with project roots
npm start /path/to/project1 /path/to/project2
# or
npx -y codefriar/sf-mcp /path/to/project1 /path/to/project2
当这样配置时,根目录将自动命名为 root1、root2 等,其中第一个设置为默认值。
方法 2:使用 MCP 工具
sf_set_project_directory- 设置用于命令的 Salesforce 项目目录- 参数:
directory- 包含 sfdx-project.json 文件的目录路径name- (可选)此项目根目录的名称description- (可选)此项目根目录的描述isDefault- (可选)将此根目录设为命令执行的默认值
- 参数:
sf_list_roots- 列出所有已配置的项目根目录sf_detect_project_directory- 尝试从用户消息中检测项目目录
示例用法:
# Set project directory with a name
sf_set_project_directory --directory=/path/to/your/sfdx/project --name=project1 --isDefault=true
# List all configured roots
sf_list_roots
# Or include in your message:
"Please deploy the apex code from the project in /path/to/your/sfdx/project to my scratch org"
方法 3:Claude Desktop 配置
按照下面的说明在 .claude.json 中配置项目根目录。
使用项目根目录
您可以在特定项目根目录中执行命令:
# Using resource URI
sf://roots/project1/commands/project deploy start --sourcedir=force-app
# Using rootName parameter
sf_project_deploy_start --sourcedir=force-app --rootName=project1
项目目录必须为部署、源代码检索和其他特定于项目的操作指定。如果配置了多个根目录,则除非另有说明,否则将使用默认根目录。
关键实现工具
以下命令是特别实现并保证可以工作的:
组织管理
sf_org_list- 列出 Salesforce 组织- 参数:
json,verbose
- 参数:
sf_auth_list_orgs- 列出已认证的 Salesforce 组织- 参数:
json,verbose
- 参数:
sf_org_display- 显示关于组织的详细信息- 参数:
targetusername,json
- 参数:
sf_org_open- 在浏览器中打开一个组织- 参数:
targetusername,path,urlonly
- 参数:
Apex 代码
sf_apex_run- 运行匿名 Apex 代码- 参数:
targetusername,file,apexcode,json
- 参数:
sf_apex_test_run- 运行 Apex 测试- 参数:
targetusername,testnames,suitenames,classnames,json
- 参数:
数据管理
sf_data_query- 执行 SOQL 查询- 参数:
targetusername,query,json
- 参数:
sf_schema_list_objects- 列出组织中的 sObjects- 参数:
targetusername,json
- 参数:
sf_schema_describe- 描述一个 Salesforce 对象- 参数:
targetusername,sobject,json
- 参数:
部署
sf_project_deploy_start- 将源代码部署到组织- 参数:
targetusername,sourcedir,json,wait
- 参数:
动态发现工具
服务器会发现所有可用的 Salesforce CLI 命令,并以 sf_<topic>_<command> 的格式注册这些命令为工具。
例如:
sf_apex_run- 运行匿名 Apex 代码sf_data_query- 执行 SOQL 查询
对于嵌套主题命令,工具名称包括带有下划线的完整路径:
sf_apex_log_get- 获取 apex 日志sf_org_login_web- 使用网页流登录组织
服务器还会尽可能为常见的嵌套命令创建简化的别名:
sf_get作为sf_apex_log_get的别名sf_web作为sf_org_login_web的别名
可用命令根据安装的 Salesforce CLI 插件而有所不同。
注意: 命令发现会被缓存以提高启动性能。如果您安装了新的 SF CLI 插件,请使用
sf_cache_refresh工具更新缓存,然后重新启动服务器。
资源
以下资源提供了关于 Salesforce CLI 的文档:
sf://help- 主 CLI 文档sf://topics/{topic}/help- 主题帮助文档sf://commands/{command}/help- 命令帮助文档sf://topics/{topic}/commands/{command}/help- 主题-命令帮助文档sf://version- 版本信息sf://roots- 列出所有配置的项目根目录sf://roots/{root}/commands/{command}- 在特定项目根目录中执行命令
工作原理
- 启动时,服务器会检查缓存的命令列表(存储在
~/.sf-mcp/command-cache.json中) - 如果存在有效的缓存,则使用该缓存来注册命令;否则,动态发现命令
- 在发现过程中,服务器查询
sf commands --json以获取所有可用命令的完整列表 - 命令元数据(包括参数和描述)直接从 JSON 输出中提取
- 所有命令都作为带有适当参数模式的 MCP 工具进行注册
- 注册资源用于帮助文档
- 当调用某个工具时,执行相应的 Salesforce CLI 命令
项目根目录管理
对于需要 Salesforce 项目上下文的命令:
- 服务器检查是否通过
sf_set_project_directory配置了任何项目根目录 - 如果配置了多个根目录,默认使用默认根目录,除非指定了特定的根目录
- 如果没有设置根目录,服务器将提示用户指定一个项目目录
- 命令在适当的项目目录中执行,确保正确的上下文
- 用户可以根据需要添加或切换多个项目根目录
特定于项目的命令(如部署、检索等)将自动在适当的项目目录中运行。
对于不需要项目上下文的命令,工作目录无关紧要。
您可以通过以下方式在特定项目根目录中执行命令:
- 使用资源 URI:
sf://roots/{rootName}/commands/{command} - 为命令工具提供
rootName参数(内部实现细节) - 使用
sf_set_project_directory --isDefault=true设置特定根目录为默认
命令缓存
为了提高启动性能,MCP 服务器会缓存已发现的命令:
- 缓存存储在
~/.sf-mcp/command-cache.json中 - 包括所有主题、命令、参数和描述
- 缓存包含验证时间戳和 SF CLI 版本检查
- 默认情况下,缓存在 7 天后过期
- 安装新的 Salesforce CLI 插件时,请使用
sf_cache_refresh更新缓存
解决缓存问题
服务器首次运行时会进行全面的命令发现,这可能需要一些时间。如果您遇到缺少命令或缓存问题:
- 停止 MCP 服务器(如果正在运行)
- 手动删除缓存文件:
rm ~/.sf-mcp/command-cache.json - 再次启动服务器:
npm start
这将强制使用官方 CLI 元数据重新发现所有命令。
如果特定命令仍然缺失,或者您安装了新的 SF CLI 插件:
- 使用 Claude Desktop 中的
sf_cache_refresh工具 - 停止并重启 MCP 服务器
处理嵌套主题
Salesforce CLI 有一个多层的命令结构。此 MCP 服务器通过以下方式处理这些嵌套命令:
- 将冒号分隔的路径转换为下划线格式 (
apex:log:get→sf_apex_log_get) - 为常见的深层命令提供别名(如果可能的话,使用
sf_get代替sf_apex_log_get) - 在工具名称中保留完整的命令层次结构
- 使用来自
sf commands --json的官方命令结构
嵌套主题命令在可能的情况下会注册两次——一次使用完整的层次结构名称,另一次使用简化的别名,
这样更便于发现和使用。
许可证
ISC