关于 Provar MCP Server
Provar MCP Server 是 Provar DX CLI 内置的 MCP 服务,面向使用 Provar Automation 的 Salesforce 测试团队。它可检查项目、生成页面对象和测试用例,并进行分层验证与测试运行。
主要功能
- 01检查 Provar 项目结构
- 02生成页面对象和测试用例
- 03执行分层验证并评分
- 04支持 NitroX 组件页面对象
- 05运行本地或 Quality Hub 验证
适用场景
- 01从项目结构生成测试资产
- 02检查测试层级并定位质量问题
- 03通过 Quality Hub 执行和跟踪测试
MCP 相关
内置 MCP 服务通过 stdio 为 Claude Desktop、Claude Code、Cursor 等客户端提供 Provar 工具、资源和提示词。允许的文件操作路径可通过启动参数限定;验证可使用本地规则或 Quality Hub API。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@provartesting/provardx-cli
ProvarDX CLI 是什么?
Provar DX CLI 是一款 Salesforce CLI 插件,面向希望使用 Provar Automation 自动执行测试,并将测试结果及其他质量相关指标报告到 Provar Quality Hub 的 Provar 客户。
安装、更新和卸载
需要 Node.js 18–24(推荐使用 LTS 22)。 由于某个传递依赖发生了破坏性变更,目前尚不支持 Node 25+。使用 node --version 检查。
安装插件
$ sf plugins install @provartesting/provardx-cli
更新插件
$ sf plugins update
卸载插件
$ sf plugins uninstall @provartesting/provardx-cli
MCP 服务(AI 辅助质量保障)
Provar DX CLI 内置了 模型上下文协议(MCP)服务,可将 AI 助手(Claude Desktop、Claude Code、Cursor)直接连接到您的 Provar 项目。连接后,AI Agent 可以检查项目结构、生成页面对象和测试用例、使用质量评分验证测试层级的每一层,并处理适用于 LWC、Screen Flow、Industry Components、Experience Cloud 和 HTML5 的 NitroX(混合模型)组件页面对象。
验证支持两种模式:仅本地(结构规则,无需密钥)或 Quality Hub API(170 多条规则、质量评分——需要 pv_k_ API 密钥)。还没有账户?申请访问权限。
快速设置
需要: 已安装并激活许可证的 Provar Automation IDE。Node.js 18–24 必须位于 PATH 中。
选项 A — 无需安装(推荐用于 Claude Desktop)
无需预先设置。将以下内容粘贴到 Claude Desktop 配置文件,然后重启应用:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"provar": {
"command": "npx",
"args": ["-y", "@provartesting/provardx-cli", "mcp", "start", "--allowed-paths", "/path/to/your/provar/project"]
}
}
}
npx -y 会在首次使用时自动下载软件包——无需 sf,也无需单独安装。
Claude Code — 运行一次以注册服务:
claude mcp add provar -s user -- npx -y @provartesting/provardx-cli mcp start --allowed-paths /path/to/your/provar/project
选项 B — 全局安装 sf 插件
更倾向于持久的全局安装?安装一次,然后使用 sf 命令:
# 1. Install the plugin
sf plugins install @provartesting/provardx-cli
# 2. (Optional) Authenticate for full 170+ rule validation
sf provar auth login
Claude Desktop 使用全局安装的配置:
{
"mcpServers": {
"provar": {
"command": "sf",
"args": ["provar", "mcp", "start", "--allowed-paths", "/path/to/your/provar/project"]
}
}
}
Windows(Claude Desktop): 如果服务无法启动,请使用
sf.cmd代替sf。
Claude Code 使用全局安装:
claude mcp add provar -s user -- sf provar mcp start --allowed-paths /path/to/your/provar/project
📖 docs/mcp.md — 完整设置指南、全部 43 个工具、6 个资源、11 个 MCP 提示词及故障排除。
命令
sf provar auth loginsf provar auth rotatesf provar auth statussf provar auth clearsf provar mcp startsf provar config getsf provar config setsf provar automation config generatesf provar automation config loadsf provar automation config validatesf provar automation config getsf provar automation config setsf provar automation setupsf provar automation project compilesf provar automation metadata downloadsf provar automation test runsf provar quality-hub connectsf provar quality-hub displaysf provar quality-hub opensf provar quality-hub testcase retrievesf provar quality-hub test runsf provar quality-hub test run reportsf provar quality-hub test run abortsf provar manager connect(已弃用 — 请使用sf provar quality-hub connect)sf provar manager display(已弃用 — 请使用sf provar quality-hub display)sf provar manager open(已弃用 — 请使用sf provar quality-hub open)sf provar manager testcase retrieve(已弃用 — 请使用sf provar quality-hub testcase retrieve)sf provar manager test run(已弃用 — 请使用sf provar quality-hub test run)sf provar manager test run report(已弃用 — 请使用sf provar quality-hub test run report)sf provar manager test run abort(已弃用 — 请使用sf provar quality-hub test run abort)
sf provar auth login
登录 Provar Quality Hub 并保存 API 密钥。
USAGE
$ sf provar auth login [--url <value>]
FLAGS
--url=<value> Override the Quality Hub API base URL (for non-production environments).
DESCRIPTION
Opens a browser to the Provar login page. After you authenticate, your API key is
stored at ~/.provar/credentials.json and used automatically by the Provar MCP tools
and CI/CD integrations. The key is valid for approximately 90 days.
For CI/CD pipelines (GitHub Actions, Jenkins, etc.) where a browser cannot open:
run sf provar auth login once on your local machine, copy the api_key value from
~/.provar/credentials.json, and store it as the PROVAR_API_KEY environment variable
or secret in your pipeline. Rotate the secret every ~90 days when the key expires.
Don't have an account? Request access at:
https://aqqlrlhga7.execute-api.us-east-1.amazonaws.com/dev/auth/request-access
EXAMPLES
Log in interactively:
$ sf provar auth login
Log in against a staging environment:
$ sf provar auth login --url https://dev.api.example.com
sf provar auth rotate
轮换已保存的 API 密钥,无需通过浏览器重新进行身份验证。
USAGE
$ sf provar auth rotate
DESCRIPTION
Exchanges your current pv_k_ key for a new one atomically. The old key is
invalidated immediately. The new key is written to ~/.provar/credentials.json.
Use this to rotate your key on a regular schedule (~every 90 days) without
going through the browser login flow. If your current key is already expired,
run sf provar auth login instead.
EXAMPLES
Rotate the stored API key:
$ sf provar auth rotate
sf provar auth status
显示当前 API 密钥配置,并对其进行验证以确认可用于 Quality Hub。
USAGE
$ sf provar auth status
DESCRIPTION
Reports whether an API key is configured, where it came from (environment variable
or credentials file), and performs a live check against the Quality Hub API to
confirm the key is still valid.
EXAMPLES
Check auth status:
$ sf provar auth status
sf provar auth clear
移除已保存的 API 密钥。
USAGE
$ sf provar auth clear
DESCRIPTION
Deletes ~/.provar/credentials.json and revokes the key server-side. After clearing,
the MCP tools fall back to local validation mode. Has no effect if no key is stored.
EXAMPLES
Remove the stored key:
$ sf provar auth clear
sf provar mcp start
通过 stdio 传输启动用于 Provar 工具的本地 MCP 服务。
USAGE
$ sf provar mcp start [-a <value>...]
FLAGS
-a, --allowed-paths=<value>... Allowed base directory paths for file operations.
Defaults to the current working directory.
Repeat the flag to allow multiple paths.
DESCRIPTION
Launches a stateless MCP (Model Context Protocol) server that exposes Provar tools
to AI assistants (Claude Desktop, Claude Code, Cursor) via stdio transport. All MCP
JSON-RPC communication happens over stdout; all internal logging goes to stderr.
Note: --json is not available on this command — stdout is reserved for MCP traffic.
TOOLS EXPOSED
43 tools across: project inspection & org describe, Page Object and test-case
authoring/validation, test-suite/plan validation, properties files, Quality Hub
(test runs, defects, corpus examples), Provar Automation, ANT build, and NitroX
components. See docs/mcp.md for the full catalogue with schemas and examples.
EXAMPLES
Start MCP server (accepts stdio connections from Claude Desktop / Cursor):
$ sf provar mcp start
Start with an explicit allowed path:
$ sf provar mcp start --allowed-paths /workspace/provar
Allow multiple directories:
$ sf provar mcp start -a /workspace/project-a -a /workspace/project-b
📖 完整的工具文档和客户端配置:docs/mcp.md
sf provar config get
从指定的 JSON 文件中获取一个值。
USAGE
$ sf provar config get -f <value> [--json]
FLAGS
-f, --file-path=<value> (required) File path of the JSON file to get the property value from.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Retrieve a value from the specified JSON file.
EXAMPLES
Get the testEnvironment value within the environment property from the config.json file:
$ sf provar config get environment.testEnvironment -f config.json
sf provar config set
在指定的 JSON 文件中设置一个或多个属性。
USAGE
$ sf provar config set [--json]
FLAGS
-f, --file-path=<value> (required) File path of the JSON file to get the property value from.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Set one or more properties in the specified JSON file.
EXAMPLES
Set the environment to “SIT” in the config.json properties file:
$ sf provar config set environment.testEnvironment="SIT" -f config.json
Set the testEnvironment to “SIT” and the webBrowser to “Chrome”, within the environment property.
$ sf provar config set environment.testEnvironment="SIT" environment.webBrowser="Chrome" -f config.json
Set testCases to a list of test case paths in the config.json properties file.
$ sf provar config set testCases='["tests/myTestCase.testcase","tests/testSuite1/myTestCase1.testCase"]' -f config.json
sf provar automation config generate
生成 ProvarDX 属性文件模板。
USAGE
$ sf provar automation config generate [--json] [-p <value>]
FLAGS
-p, --properties-file=<value> (required) Path to the properties file that will be generated.
-n, --no-prompt Don't prompt to confirm file should be overwritten.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Generate a boilerplate property file.
EXAMPLES
Generate a basic properties file named provardx-properties.json:
$ sf provar automation config generate -p provardx-properties.json
sf provar automation config load
验证并加载 ProvarDX 属性文件,以供后续使用。
USAGE
$ sf provar automation config load -p <value> [--json]
FLAGS
-p, --properties-file=<value> (required) Path of the properties file to be loaded.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Validate and load a ProvarDX properties file for later use.
EXAMPLES
Validate that the myproperties.json file is valid.
$ sf provar automation config load -p myproperties.json
sf provar automation config validate
检查已加载的属性文件是否已设置所有必需属性。
USAGE
$ sf provar automation config validate [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Check if the loaded properties file has all the required properties set.
EXAMPLES
Check if the loaded properties file has all the required properties set:
$ sf provar automation config validate
sf provar automation config get
从已加载的属性文件中获取一个值。
USAGE
$ sf provar automation config get [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Retrieve a value from the loaded properties file.
EXAMPLES
Get the testEnvironment property value from the provardx-properties.json properties file:
$ sf provar automation config get environment.testEnvironment
sf provar automation config set
在已加载的属性文件中设置一个或多个属性。
USAGE
$ sf provar automation config set [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Set one or more properties in the loaded properties file.
EXAMPLES
Set the environment to "SIT” in the provardx-properties.json properties file:
$ sf provar automation config set environment.testEnvironment="SIT"
Set the testEnvironment to "SIT” and the webBrowser to "Chrome”, within the environment property:
$ sf provar automation config set environment.testEnvironment="SIT" environment.webBrowser="Chrome"
Set testCases to a list of test case paths in the provardx-properties.json properties file:
$ sf provar automation config set testCases='["tests/myTestCase.testcase","tests/testSuite1/myTestCase1.testCase"]'
sf provar automation setup
下载并安装 Provar Automation。
USAGE
$ sf provar automation setup [--json] [-v <value>]
FLAGS
-v, --version=<value> Provar Automation build version number.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Download and install Provar Automation.
EXAMPLES
Install version Provar Automation version 2.12.1:
$ sf provar automation setup --version 2.12.1
sf provar automation project compile
将 PageObject 和 PageControl Java 源文件编译为目标代码。
USAGE
$ sf provar automation project compile [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Compile PageObject and PageControl Java source files into object code.
EXAMPLES
Compile the project using the configuration set in the properties file:
$ sf provar automation project compile
sf provar automation metadata download
下载指定 Provar Salesforce 连接所需的所有元数据。
USAGE
$ sf provar automation metadata download -c <value> [--json]
FLAGS
-c, --connections=<value> (required) Comma-separated list of names of Provar Salesforce connections to use, as defined in the project.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Download any required metadata for a specified Provar Salesforce connection.
EXAMPLES
Refresh metadata for the MySalesforceConnection connection and store it in folder set in the properties file:
$ sf provar automation metadata download -c MySalesforceConnection
sf provar automation test run
按照已加载的属性文件中指定的内容运行测试。
USAGE
$ sf provar automation test run [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Run the tests as specified in the loaded properties file.
EXAMPLES
Run the tests as specified in the loaded properties file:
$ sf provar automation test run
sf provar quality-hub connect
连接到 Provar Quality Hub 组织。
USAGE
$ sf provar quality-hub connect -o <value> [--json]
FLAGS
-o, --target-org=<value> (required) Username or alias set in the SF CLI which corresponds to the Provar Quality Hub org.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Load the alias or username to be used in subsequent Quality Hub commands.
EXAMPLES
Connect to the Quality Hub org stored with alias "ProvarQualityHub":
$ sf provar quality-hub connect -o ProvarQualityHub
sf provar quality-hub display
显示已连接的 Provar Quality Hub 组织的信息。
USAGE
$ sf provar quality-hub display [--json]
GLOBAL FLAGS
--json Format output as json.
EXAMPLES
Display information about the connected Quality Hub org:
$ sf provar quality-hub display
sf provar quality-hub open
在浏览器中打开 Provar Quality Hub。
USAGE
$ sf provar quality-hub open [--json]
GLOBAL FLAGS
--json Format output as json.
EXAMPLES
Open Quality Hub in a browser:
$ sf provar quality-hub open
sf provar quality-hub testcase retrieve
检索与提供的用户故事或元数据组件相关的测试用例。
USAGE
$ sf provar quality-hub testcase retrieve -p <value> -t Apex|ProvarAutomation [--json] [-m <value>] [-f <value>] [-i <value>] [-o <value>] [-n <value>] [-l <value>]
FLAGS
-f, --metadata-file=<value> Path to a text file containing the list of metadata components.
-i, --issues=<value> Comma-separated list of issue IDs or keys.
-l, --test-plan=<value> Test Plan name. Use to retrieve test instance file paths.
-m, --metadata-components=<value> Semicolon-separated list of metadata components.
-n, --ignore-metadata=<value> Semicolon-separated list of metadata types to ignore.
-o, --output=<value> Output to a specific file instead of stdout.
-p, --test-project=<value> (required) Test Project key to filter by.
-t, --test-automation-tool=<option> (required) <options: Apex|ProvarAutomation>
EXAMPLES
Retrieve Provar Automation test cases for user story "TM-766":
$ sf provar quality-hub testcase retrieve -p PAT -t ProvarAutomation -i "TM-766" --json
sf provar quality-hub test run
通过 Provar Quality Hub 运行测试。
USAGE
$ sf provar quality-hub test run -f <value> [--json] [-y] [-w <value>] [-p <value>] [-o <value>] [-r <value>]
FLAGS
-f, --configuration-file=<value> (required) Path to the configuration file.
-o, --output=<value> Output to a specific file instead of stdout.
-p, --polling-interval=<value> [default: 60] Polling interval in seconds.
-r, --result-format=<value> [default: human] Format of the test results.
-w, --wait=<value> Polling timeout in minutes.
-y, --synchronous Run synchronously.
EXAMPLES
Run tests and store results as JSON:
$ sf provar quality-hub test run -f config/run-grid-tests.json -w 10 -p 30 -r json -o results.json
sf provar quality-hub test run report
检查或轮询 Quality Hub 测试运行的状态。
USAGE
$ sf provar quality-hub test run report -i <value> [--json] [-r <value>] [-o <value>]
FLAGS
-i, --test-run=<value> (required) Test run ID.
-o, --output=<value> Output to a specific file instead of stdout.
-r, --result-format=<value> [default: human] Format of the test results.
EXAMPLES
Retrieve results for a test run:
$ sf provar quality-hub test run report -i 45f70417-df21-4917-a667-abc2ee46dc63 -r json -o results.json
sf provar quality-hub test run abort
中止通过 Provar Quality Hub 触发的正在进行的测试运行。
USAGE
$ sf provar quality-hub test run abort -i <value> [--json] [-p <value>] [-w <value>]
FLAGS
-i, --test-run=<value> (required) Test run ID.
-p, --polling-interval=<value> [default: 30] Polling interval in seconds.
-w, --wait=<value> [default: 2] Polling timeout in minutes.
EXAMPLES
Abort a test run:
$ sf provar quality-hub test run abort -i 45f70417-df21-4917-a667-abc2ee46dc63
已弃用的命令: 以下
sf provar manager *命令为向后兼容而保留,使用时会显示弃用警告。所有新建流水线都应使用上方对应的sf provar quality-hub *命令。
sf provar manager connect
加载后续命令连接 Provar Manager 时要使用的别名或用户名。
USAGE
$ sf provar manager connect -o <value> [--json]
FLAGS
-o, --target-org=<value> (required) Username or alias set in the SF CLI which corresponds to the Provar Manager org.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Load the alias or username to be used in subsequent commands to connect to Provar Manager.
EXAMPLES
Connect to the Provar Manager org that has been previously authorised using the SF CLI, and stored with the alias "ProvarManager":
$ sf provar manager connect -o ProvarManager
sf provar manager display
显示已连接的 Provar Manager 组织的信息。
USAGE
$ sf provar manager display [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Display information about the connected Provar Manager org.
EXAMPLES
Display information about the connected Provar Manager org:
$ sf provar manager display
sf provar manager open
在浏览器中打开 Provar Manager。
USAGE
$ sf provar manager open [--json]
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Open Provar Manager in a browser.
EXAMPLES
Open Provar Manager in a browser:
$ sf provar manager open
sf provar manager testcase retrieve
针对给定的测试项目,检索与提供的用户故事(问题)或元数据组件相关的测试用例。
USAGE
$ sf provar manager testcase retrieve -p <value> -t Apex|ProvarAutomation [--json] [--flags-dir <value>] [-m <value>] [-f <value>] [-i <value>] [-o <value>] [-n <value>] [-l <value>]
FLAGS
-f, --metadata-file=<value> Path to a text file that contains the list of metadata components in source format.
-i, --issues=<value> A comma-separated list of issue IDs, keys, or external IDs.
-l, --test-plan=<value> Test Plan Name. Use if you want to retrieve test instance file paths.
-m, --metadata-components=<value> Semicolon-separated list of metadata components, grouped and prefixed by their metadata type.
-n, --ignore-metadata=<value> Semicolon-separated list of metadata types to ignore from METADATA-COMPONENTS or METADATA-FILE.
-o, --output=<value> Output to a specific file instead of stdout.
-p, --test-project=<value> (required) Test Project key to filter by.
-t, --test-automation-tool=<option> (required) Test Automation tool used to automate the tests.
<options: Apex|ProvarAutomation>
DESCRIPTION
Retrieve test cases related to the provided user stories (issues) or metadata components, for a given test project.
EXAMPLES
Retrieve Apex unit test class ids from the test project "Salesforce Project" with key "SFP" that cover the "NewLeadFormController" and "ExistingLeadFormController" Apex classes:
$ sf provar manager testcase retrieve -p SFP -t Apex -m "ApexClass:NewLeadFormController,ExistingLeadFormController"
Retrieve Provar Automation test case paths from the test project with key "PAT" related to the user story with key "TM-766", in JSON format:
$ sf provar manager testcase retrieve -p PAT -t ProvarAutomation -i "TM-766" --json
Retrieve Provar Automation test case paths from the test project with key "PAT" related to the metadata listed in the file "changes.txt", ignoring changes to custom objects, output to "testcases.txt":
$ sf provar manager testcase retrieve -p PAT -t ProvarAutomation -f changes.txt -n CustomObject -o testcases.txt
Example of a list of metadata changes:
base/main/default/layouts/Release__c-Release Layout.layout-meta.xml
base/main/default/objects/Sprint__c/fields/Sprint_Goal__c.field-meta.xml
sf provar manager test run
通过 Provar Manager 运行测试。
USAGE
$ sf provar manager test run -f <value> [--json] [-y] [-w <value>] [-p <value>] [-o <value>] [-r <value>]
FLAGS
-f, --configuration-file=<value> (required) Path to the configuration file.
-o, --output=<value> Output to a specific file instead of stdout.
-p, --polling-interval=<value> [default: 60] Sets the polling interval in seconds. Default is 60 seconds.
-r, --result-format=<value> [default: human] Format of the test results.
-w, --wait=<value> Sets the polling timeout in minutes.
-y, --synchronous Runs command synchronously; if not specified, the command is run asynchronously.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Run tests via Provar Manager.
EXAMPLES
Run tests as per the config/run-grid-test.json configuration file, wait 10 minutes, poll every 30 seconds, and store the results as JSON in the results.json file:
$ sf provar manager test run -f config/run-grid-tests.json -w 10 -p 30 -r json -o results.json
Run tests as per the config/run-grid-test.json configuration file, wait 20 minutes, and store the results as JUnit in the junit-results.xml file:
$ sf provar manager test run -f config/run-grid-tests.json -w 20 -r junit -o junit-results.xml
sf provar manager test run report
检查或轮询测试运行操作的状态。
USAGE
$ sf provar manager test run report -i <value> [--json] [-r <value>] [-o <value>]
FLAGS
-i, --test-run=<value> (required) Test run ID.
-o, --output=<value> Output to a specific file instead of stdout.
-r, --result-format=<value> [default: human] Format of the test results.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Check or poll for the status of a test run operation.
EXAMPLES
Retrieve results for test run 45f70417-df21-4917-a667-abc2ee46dc63 and store the results as JSON in the results.json file
$ sf provar manager test run report -i 45f70417-df21-4917-a667-abc2ee46dc63 -r json -o results.json
Retrieve results for test run 45f70417-df21-4917-a667-abc2ee46dc63 and store the results as JUnit in the junit-results.xml file:
$ sf provar manager test run report -i 45f70417-df21-4917-a667-abc2ee46dc63 -r junit -o junit-results.xml
sf provar manager test run abort
中止通过 Provar Manager 触发的正在进行的测试运行。
USAGE
$ sf provar manager test run abort -i <value> [--json] [-p <value>] [-w <value>]
FLAGS
-i, --test-run=<value> (required) Test run ID.
-p, --polling-interval=<value> [default: 30] Sets the polling interval in
seconds. Default is 30 seconds.
-w, --wait=<value> [default: 2] Sets the polling timeout in
minutes. Default is 2 minutes.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Abort an in-progress test run triggered via Provar Manager.
EXAMPLES
Abort test run with ID 45f70417-df21-4917-a667-abc2ee46dc63
$ sf provar manager test run abort -i 45f70417-df21-4917-a667-abc2ee46dc63
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。