S

SF-MCP 工具

@codefriar/sf-mcp
0 Stars 15 次浏览 codefriar 更新于 2026-08-23

将 Salesforce CLI 功能暴露给像 Claude Desktop 这样的 LLM 工具,允许人工智能代理通过自然语言执行 Salesforce 命令、管理组织、部署代码和查询数据。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

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

当这样配置时,根目录将自动命名为 root1root2 等,其中第一个设置为默认值。

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

工作原理

  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}
  • 为命令工具提供 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. 使用 Claude Desktop 中的 sf_cache_refresh 工具
  2. 停止并重启 MCP 服务器

处理嵌套主题

Salesforce CLI 有一个多层的命令结构。此 MCP 服务器通过以下方式处理这些嵌套命令:

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

嵌套主题命令在可能的情况下会注册两次——一次使用完整的层次结构名称,另一次使用简化的别名,
这样更便于发现和使用。

许可证

ISC