Salesforce CLI MCP 服务器

Salesforce CLI MCP 服务器为LLM工具(如Claude Desktop)提供Salesforce CLI功能,允许AI代理执行Salesforce CLI命令并获取帮助信息。

  • by codefriar
  • JavaScript
  • 本地部署
  • 36 星标
  • 更新于
在 GitHub 查看 codefriar/sf-mcp

使用说明

Salesforce CLI MCP服务器

模型上下文协议(MCP)服务器,用于为Claude Desktop等LLM工具提供Salesforce CLI功能。

概述

此MCP服务器封装了Salesforce CLI(sf)命令行工具,并将其命令作为MCP工具和资源公开,允许LLM驱动的代理:

  • 查看有关Salesforce CLI主题和命令的帮助信息
  • 使用适当的参数执行Salesforce CLI命令
  • 在AI工作流程中利用Salesforce CLI功能

需求

  • Node.js 18+和npm
  • Salesforce命令行界面(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客户端一起使用 就像 MCP检查员 或克劳德桌面。

在Claude Desktop中配置

在Claude Desktop的配置中配置此MCP .claude.json 配置:

{
  "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桌面配置 在中配置项目根目录 .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 -列出组织中的对象
    • 参数: 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 -获取顶点日志
  • sf_org_login_web -使用web flow登录组织

服务器还尽可能为常见的嵌套命令创建简化的别名:

  • 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} -在特定项目根目录中执行命令

运作原理

  1. 启动时,服务器检查缓存的命令列表(存储在 ~/.sf-mcp/command-cache.json)
  2. 如果存在有效的缓存,则用于注册命令;否则,命令将被动态发现
  3. 在发现过程中,服务器会进行查询 sf commands --json 获取可用命令的完整列表
  4. 命令元数据(包括参数和描述)直接从JSON输出中提取
  5. 所有命令都注册为具有适当参数模式的MCP工具
  6. 资源已注册以获取帮助文档
  7. 调用工具时,将执行相应的Salesforce CLI命令

项目根管理

对于需要Salesforce项目上下文的命令:

  1. 服务器检查是否已通过配置任何项目根 sf_set_project_directory
  2. 如果配置了多个根,除非指定了特定的根,否则它将使用默认根
  3. 如果没有设置根目录,服务器将提示用户指定项目目录
  4. 命令在相应的项目目录中执行,确保上下文正确
  5. 用户可以根据需要添加或在多个项目根之间切换

特定于项目的命令(如部署、检索等) 将在相应的项目目录中自动运行。 对于不需要项目上下文的命令,工作目录并不重要。

您可以通过以下方式在特定项目根目录中执行命令:

  • 使用资源URI: sf://roots/{rootName}/commands/{command}
  • 提供a rootName 命令工具的参数(内部实现细节)
  • 将特定根设置为默认根 sf_set_project_directory --isDefault=true

命令缓存

为了提高启动性能,MCP服务器缓存发现的命令:

  • 缓存存储在 ~/.sf-mcp/command-cache.json
  • 它包括所有主题、命令、参数和描述
  • 缓存具有验证时间戳和SF CLI版本检查
  • 默认情况下,缓存将在7天后过期
  • 安装新的Salesforce CLI插件时,请使用 sf_cache_refresh 更新缓存

缓存问题疑难解答

服务器的第一次运行执行完整的命令发现,这可能需要一些时间。如果遇到缺少命令或缓存问题:

  1. 停止MCP服务器(如果正在运行)
  2. 手动删除缓存文件: rm ~/.sf-mcp/command-cache.json
  3. 重新启动服务器: npm start

这将强制使用官方CLI元数据重新发现所有命令。

如果仍然缺少特定命令,或者您安装了新的SF CLI插件:

  1. 使用 sf_cache_refresh 来自Claude Desktop的工具
  2. 停止并重新启动MCP服务器

处理嵌套主题

Salesforce CLI具有层次化的命令结构,可以有几个级别。此MCP服务器通过以下方式处理这些嵌套命令:

  • 将冒号分隔的路径转换为下划线格式(apex:log:get → sf_apex_log_get)
  • 尽可能为常见的深度命令提供别名(sf_get 为了 sf_apex_log_get)
  • 在工具名称中保留完整的命令层次结构
  • 使用来自的官方指挥结构 sf commands --json

嵌套的主题命令尽可能注册两次——一次使用完整的层次结构名称,一次使用简化的别名, 使它们更容易发现和使用。

许可证

国际协调委员会