mcpField
C
ChemDraw MCP (unofficial)

ChemDraw MCP (unofficial)

本地服务
github.com/jurimaxam-dotcom科研与教育252 天前更新

关于 ChemDraw MCP (unofficial)

ChemDraw MCP (unofficial) 是面向化学学习与实验报告的 MCP 服务,可将分子名称或 SMILES 转为结构图,也能生成反应图并查询分子数据。绘图在本地通过 RDKit 完成,结构可在聊天面板中预览。

主要功能

  1. 01名称或 SMILES 转为分子结构图
  2. 02生成反应示意图
  3. 03比较分子并标出差异
  4. 04导出 PNG、SVG 和可选 CDXML
  5. 05查询 PubChem 属性与 GHS 安全信息

适用场景

  1. 01为实验报告制作统一风格的结构图
  2. 02并排比较候选分子
  3. 03绘制带反应条件的反应方案
  4. 04查看分子属性与危险信息

MCP 相关

它向 MCP 客户端提供分子绘制、批量生成、比较、反应图生成和分子数据查询等工具;默认 MVP 暴露其中部分工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jurimaxam-dotcom-chemdraw": {
"command": "uvx",
"args": [
"chemdraw-mcp"
]
}
}
}
启动命令uvx chemdraw-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypichemdraw-mcp0.6.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

chemdraw-mcp

CI Release License: Apache-2.0 PyPI GitHub stars

聊天 → 化学结构。 在 Claude Desktop 中说 “画出阿司匹林”,即可获得 正确、可直接用于印刷的结构图——由 RDKit 在本地渲染,并可直接在聊天中交互。

chemdraw-mcp 面板:阿司匹林的官能团在悬停时高亮显示,随后展示 PubChem 数据表

此演示经过剪辑,以缩短 PubChem 的加载等待时间。

  • 准确匹配分子,而非相似结构。 名称(也包括德语俗名)、IUPAC 名称和 SMILES 会通过 OPSIN、PubChem 和 NCI 解析;一项固定的身份测试会将 24 个输入与其 InChIKey 进行核对。
  • 可直接用于实验室报告。 以统一的出版物风格输出 PNG 和 SVG,还可选择 ChemDraw CDXML——无需 ChemDraw 许可证。
  • 理解结构,而不只是绘制。 悬停在官能团上即可查看其位置,切换到包含 GHS 安全信息的 PubChem 数据表,还可比较结构并高亮显示差异。

安装:下载 Claude Desktop 扩展(.mcpb,双击即可)——或者运行 uv tool install chemdraw-mcp && chemdraw-install。 免费且开源(Apache-2.0),无需 API 密钥,也无需注册。

不使用 chemdraw-mcp使用 chemdraw-mcp
Claude 用文字描述结构,或生成需要你粘贴到其他地方的 SMILES结构直接显示在聊天中,可立即导出
在 ChemDraw 或 ChemSketch 中手绘图形每张图只需一句话即可生成,整份报告风格统一
从三个不同的网站查找摩尔质量、CAS 和危害信息一份数据表,数据来自 PubChem

30 秒试用

  1. 下载 Claude Desktop 扩展 (chemdraw-mcp-<version>.mcpb) 并双击安装。在 Claude Desktop 中确认。
  2. 打开一个新聊天,说 “使用 ChemDraw MCP:画出咖啡因”——随后会出现一个显示结构的面板。
  3. 接着试试下面这些指令:
提问结果
“并排画出布洛芬和萘普生,并标出差异”显示两种结构,并高亮差异
“画出阿司匹林、咖啡因和对乙酰氨基酚”分别生成结构和文件
“画出乙醇与乙酸反应生成乙酸乙酯和水”反应示意图
“显示咖啡因的数据表”结构、PubChem 属性和 GHS 安全信息

无需 API 密钥,无需注册,也无需 ChemDraw 许可证。结构渲染在你的电脑上运行。 详情和其他安装方式请参阅安装。 如果它为你节省了时间,点个 ⭐ 就能帮助其他学生发现它。

输出示例

“画出咖啡因”——由 generate_molecule 生成的可直接用于印刷的 PNG:

由 generate_molecule 渲染的咖啡因结构

“布洛芬与萘普生和酮洛芬有何区别?”—— compare_molecules 会以中性色显示共同骨架,并高亮不同之处:

聊天面板中并排显示布洛芬、萘普生和酮洛芬,并高亮标出差异

“展示乙醇与乙酸的 Fischer 酯化反应” — generate_reaction 会在聊天面板中实时绘制反应式,带有平衡箭头(⇌),并在箭头上方和下方标出反应条件:

聊天面板中的 Fischer 酯化反应,带有平衡箭头以及箭头上方和下方的反应条件

其他示例 — 仅适用于完整配置

以下示例包含在 MVP 中暂未启用的功能。使用 CHEMDRAW_PROFILE=full 可启用完整功能集。

“逐步展示 Fischer 酯化反应机理” — generate_mechanism 会在交互面板中绘制弯曲的电子流箭头:

聊天面板中逐步展示 Fischer 酯化反应机理,并带有弯曲箭头

概览会将每一步排列在同一列中,且键长一致,让反应物、过渡态和产物一目了然:

SN2 概览:反应物、带有部分键和弯曲箭头的过渡态、产物

“为我的 Suzuki 偶联反应制作一张底物适用范围图:3a 92%,3b 反应 12 h 后为 88%, 3c 64%,ee 为 94%,dr 为 10:1,3d 71%” — generate_scope_table 会在上方设置带反应条件的通用反应式,并在下方排列产物,所有结构共用键长和标题基线:

底物适用范围图:顶部为带反应条件的 Suzuki 偶联反应式,下方为四种联苯产物,标记为 3a 至 3d,并注明产率和 ee/dr

“绘制乙酸乙酯的 IR 光谱” — generate_spectrum(根据给定数据绘制峰值,并采用各类型对应的坐标轴惯例):

带有标记峰的乙酸乙酯示意 IR 光谱

“我的酯化反应的 TLC:原料在 0.30,产物在 0.65,共点样显示两者,还有一些原料剩余” — generate_tlc 会绘制实验报告所需的薄层色谱板,并将展开剂和检测方法写入标题:

TLC 板示意图,含四条泳道:原料位于 Rf 0.30,反应泳道中有微弱的原料斑点和位于 0.65 的酯,共点样泳道中两者都有,参比泳道位于 0.65

“以 3D 形式展示咖啡因” — generate_3d 会嵌入分子(ETKDG + 力场),并在聊天面板中打开可拖动旋转的球棍模型查看器:

凹面查看器中的旋转 3D 咖啡因球棍模型

“磷酸用 NaOH 滴定的滴定曲线,以酚酞为指示剂” — generate_titration_curve 会根据精确的电荷平衡计算 pH,并显示当量点、缓冲点(pH = pKa)和指示剂变色范围;其配套工具 generate_species_distribution 则会显示每个 pH 下占主导地位的质子化物种:

磷酸的滴定曲线,具有三个当量点和酚酞变色范围 磷酸各物种随 pH 的分布及 pKa 交叉点

“创建一个包含重要分子的 Anki 卡组,并在 Anki 中打开” — export_anki_deck 会生成可直接导入的 .apkg 文件, 其中嵌入了渲染好的结构;如果安装了可选的 AnkiConnect 插件, 卡片会直接进入正在运行的 Anki,无需点击:

药理学

仅限完整配置(CHEMDRAW_PROFILE=full,参见配置文件)。

药理学课程总会要求绘制的曲线,可根据你提供的数据生成。 图表及其背后的计算(calculate_pharmacokinetics)使用相同的 公式,因此图形和数值始终一致。

“绘制口服 500 mg、每 8 小时一次的血浆浓度曲线(F 0.8,Vd 70 L,半衰期 4.6 h,ka 1.2/h),治疗窗为 2–6 mg/L” — generate_pk_curve 会模拟至稳态,并输出 Cmax、tmax、AUC、蓄积情况以及达到 90 % 稳态所需的时间:

多次口服给药的血浆浓度随时间变化曲线,在治疗窗内逐渐达到稳态

“绘制 EC50 为 10 nM 的激动剂量效曲线,并展示竞争性拮抗剂(20 nM,KB 10 nM)的作用” — generate_dose_response 会按剂量比使曲线右移,并保持 Emax 不变:

激动剂的 Hill 曲线,以及竞争性拮抗剂使其右移后的曲线

完整配置功能参考

CHEMDRAW_PROFILE=full 时提供的全部 23 个工具。默认 MVP 仅注册 generate_molecule、batch_generate、compare_molecules、generate_reaction、 export_anki_deck、lookup_molecule_data 以及面板内部的 save_png。 文件写入 ~/ChemDraw-Output/; 每个绘图工具还会返回实时预览,供聊天面板显示。

结构和反应方案

  • generate_molecule — 名称/SMILES → 2D 结构图,输出 PNG + SVG (可选 CDXML),并提供性质、官能团检测和 Lipinski 五规则检查
  • batch_generate — 一次调用即可生成一整组结构
  • generate_reaction — 反应物 + 产物 + 条件 → 反应方案 条件显示在箭头上方和下方;支持正向(→)、平衡(⇌)或 逆合成(⇒)箭头,分子式中的数字会以下标显示(H2SO4 → H₂SO₄)
  • generate_mechanism — 逐步绘制弯箭头反应机理(SN1、SN2、Fischer 酯化)
  • generate_scope_table — 绘制方法学文献中的底物范围图:顶部为带反应条件的通用方程式,下方为 产物网格,每个产物都标注编号(“1a”)和产率(“78%”),还可选 ee/dr/时间。所有结构共用一种键长,所有说明共用一条 基线;无法解析的条目会报告出来,但不会导致失败
  • compare_molecules — 并排比较 2–4 个结构,突出显示差异, 将共有骨架(MCS)显示为中性色
  • generate_3d — 在聊天面板中显示可旋转的 3D 球棍构象(ETKDGv3 + 力场), 并支持导出 SDF

实验室结果与分析

  • generate_spectrum — 根据峰列表绘制示意光谱(IR、NIR、 Raman、UV/Vis、荧光、ORD、CD、¹H/¹³C NMR、MS),并遵循各类型的坐标轴 规范——只绘制给定的峰,不预测光谱
  • generate_tlc — 根据 Rf 值绘制 TLC 板示意图:底部为起始线, 顶部为溶剂前沿;每个点样位置(起始物 / 反应液 / 共点样)对应一条带标题的泳道; 在每个斑点旁标注 Rf,并将流动相和检测方式作为标题打印出来——这正是实验报告所需的示意图
  • generate_titration_curve — 根据精确电荷平衡绘制 pH 与滴定剂体积的关系曲线, 并标出当量点、缓冲点(pH = pKa)和指示剂变色范围
  • generate_species_distribution — 绘制质子化物种的分数随 pH 变化的曲线(Henderson–Hasselbalch),并标出 pKa 交叉点
  • generate_calibration_curve — 对标准样品进行最小二乘拟合, 并像用直尺读取那样从拟合线上读出未知样品的结果。超出校准范围的样品会标记为外推, 不会被悄悄报告为正常结果;还会提供检出限和定量限 (DIN 32645),以供验证

实验台计算(既要给出数值,也要展示计算过程——实验报告两者都需要)

  • generate_pk_curve — 单室模型中的血浆浓度随时间变化: 单次给药或重复给药(包括达到稳态的累积过程),口服或 i.v. 给药, 并绘出治疗窗
  • generate_dose_response — 对数坐标轴上的 Hill 曲线,标出 EC50; 竞争性拮抗剂会使曲线平行右移(剂量比 r = 1 + [B]/KB,Emax 不变)
  • calculate_solution — 需要称取多少物质(m = c · V · M)、实际得到多少、 如何稀释(明确写出溶剂体积,C₁V₁ = C₂V₂)、 如何进行交叉混合,以及包括 CuSO₄·5H₂O 等水合物在内的摩尔质量。 如果计算出的取样量低于分析天平的分辨能力,则会发出警告——此时应改为称取更多物质后再稀释
  • calculate_content — 按照规程要求进行含量测定:每次测量得到一个含量 → Grubbs 异常值检验 → 均值、s、RSD → 与标示含量进行 t 检验。提供滴定法(包括通过基准滴定测定滴定度)和光度法, 以及脂肪特性测定(酸值、皂化值、酯值和碘值)和 Karl Fischer 水分测定等其他 method
  • calculate_ph — 弱酸、强酸、弱碱、强碱、缓冲液,以及精确到可称量质量的缓冲液配方。 通过精确电荷平衡求解,并在旁边列出教科书近似结果:两者不一致时,会指出近似法不再满足其假设。 10⁻⁸ M HCl 的结果是 pH 6.98,而不是 8
  • calculate_pharmacokinetics — 单室模型及其计算过程: 半衰期、浓度随时间的变化、AUC、口服给药后的 tmax/Cmax、 蓄积和稳态、负荷剂量和维持剂量。提供 Vd 以及 ke、半衰期或清除率中的任一项; 如果数值相互矛盾,会明确指出,不会悄悄替你做出取舍

物质数据(在线查询)

  • lookup — 以文本形式提供事实,每个问题选择一个 topic: properties(分子式、质量、CAS、InChIKey——默认选项)、safety(GHS 危险说明、象形图、信号词)、physical(熔点 / 沸点、溶解度、密度)、 biochem(ChEBI 分类及相关 UniProt 条目)、pathway(来自 KEGG 的代谢通路)
  • lookup_molecule_data — 将 PubChem 和 GHS 数据整合为一份数据表, 供聊天内面板使用,并包含结构
  • predict_spectrum — 预测结构应有的 IR 吸收带(包括强度和谱带形状), 判断测得的波数可能对应什么,以及预期的 ¹H 信号数量和积分比。该工具采用确定性方法, 因此会说明自身的能力边界:不提供 ppm 化学位移,也会将非对映异位质子计作一个信号

考试准备

  • export_anki_deck — 将抽认卡导出为可直接导入 Anki 的 .apkg 文件: 结构↔名称练习(可选反向:一条笔记,两个方向),完形填空卡片、鉴别/检测反应、光谱波段分配——嵌入渲染后的图像,并支持逐卡标签和 Parent::Child 子牌组;重新导出牌组会更新卡片,而不是重复添加。也可以通过 AnkiConnect 插件直接发送到正在运行的 Anki。传入 curated_deck_id 代替自备卡片,即可使用经过公式验证的小型入门牌组(经典镇痛药、Ph.Eur. 鉴别反应)

每个工具都属于五个领域之一——绘图、实验室图形、查询、计算、Anki——并且会明确说明自身的用途和非用途,以避免双向误用,因此“绘制 aspirin”不会进入底物范围网格,“我的缓冲液 pH 是多少?”也不会进入绘图工具。还有一个工具不属于这些领域:save_png 是面板导出按钮对应的服务端部分,只会在你点击按钮时调用,不会自行运行。

只有在设置了 CHEMDRAW_VAULT_PATH 时,完整配置才会包含两个可选知识库工具(search_vault、read_vault_entry);未设置时,该配置恰好会提供上述 23 个工具。MVP 从不注册知识库工具。

绘图工具的选项
  • formats — 默认为 ["png","svg"];generate_molecule、generate_reaction 和 batch_generate 还可额外使用 "cdxml"。图形工具(generate_scope_table、generate_tlc、generate_spectrum)不支持 CDXML,并会给出明确错误,而不会写入无意义的内容。
  • abbreviate_groups=True — 将常见取代基绘制为化学家实际使用的标签:Ph、Bn、OMe、OAc、tBu、CO₂H、Boc、Ts、TBS。在单元格变小时尤其有用——范围图仍然清晰易读,因为只有底物之间不同的部分会完整显示。适用于 generate_molecule、generate_reaction、generate_scope_table、batch_generate。
  • render_style — 在同样的四个工具中,可选择命名样式,而不必逐一设置一堆渲染参数。双栏排版中的小图适合使用 "compact"(细键、限制标签尺寸、紧凑边距);演示文稿幻灯片适合使用 "presentation"(加粗双键、最小字号、增加留白);黑白打印适合使用 "grayscale",避免红色和蓝色最终变成两种难以区分的灰色。留空则保持未经修改的默认样式。
  • annotate_stereo=True — 在二维绘图中打印 CIP 描述符(R/S、E/Z)(generate_molecule、batch_generate)。

配置

默认的 MVP 配置侧重于五项任务:绘制分子、绘制多个独立结构、比较化合物、绘制反应方案,以及将结构转换为 Anki 抽认卡。面板还支持化合物数据表、PNG 导出和“添加到 Anki”按钮。总共会注册七个工具。这是一套适用于学习、教学和实验室报告的通用化学工作流。

其他功能仍保留在代码和可选的 完整配置中,但不会在 MVP 中注册或调用。单独的浏览器练习训练器仍然保留,不属于 MCP MVP 的范围。

切换配置

在仓库根目录运行(更改配置后重启服务):

uv run chemdraw-tool-server                         # MVP, the default
CHEMDRAW_PROFILE=full uv run chemdraw-tool-server   # restore all 23 tools

对于在 claude_desktop_config.json 中注册的服务,请在该服务条目中设置 "env": {"CHEMDRAW_PROFILE": "full"},同时保留任何现有环境变量,然后重启 Claude Desktop。删除该变量或将其设为 mvp,即可返回 MVP。Shell 变量不会自动配置已经运行的 Desktop 应用。无效的配置名称会导致启动失败并报错。

安装

有四种安装方式;任选一种即可——重复安装会导致服务被注册两次,模型看到的每个工具都会变成两个。选项 2 和 3 会幂等地合并到配置中,操作前请先备份,并且不会更改你配置的其他 MCP 服务。之后重启 Claude Desktop 并询问:“画出咖啡因”。

选项 0 — 安装包(macOS/Linux,无需终端):从最新版本下载 chemdraw-mcp-<version>.mcpb,双击并在 Claude Desktop 中确认。首次启动时会通过 uv 从 PyPI 获取软件包(如未安装,会为你安装 uv)——约 40 MB,请稍等片刻;之后每次启动都无需联网。安装后重启一次 Claude Desktop。 如果你已经通过选项 1 或 2 安装,请先移除相应条目。

选项 1 — 克隆仓库(如果你想阅读或修改代码,推荐此方式;如果缺少 uv,会先安装 uv,再同步依赖并注册服务):

git clone https://github.com/jurimaxam-dotcom/chemdraw-mcp.git
cd chemdraw-mcp && ./install.sh

选项 2 — 从 PyPI 安装,无需克隆(需要 uv):

uv tool install chemdraw-mcp
chemdraw-install

chemdraw-install 会使用已安装启动器的绝对路径为你写入 Claude Desktop 条目,并打印已注册的启动命令。

**选项 3 — 手动编辑配置。**将以下内容添加到 claude_desktop_config.json 的 mcpServers 下(macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

"chemdraw-tool": {
  "command": "/opt/homebrew/bin/uvx",
  "args": ["chemdraw-mcp"]
}

所有手动安装都可能踩的坑:Claude Desktop 不会从登录 shell 启动 MCP 服务——它使用的是精简的 GUI PATH。在那里无法解析单独的 "uvx" 或 "uv",服务会启动失败且不作提示。务必将 which uvx 在你的机器上打印的绝对路径填入 command。选项 1 和 2 会为你完成这一步。

可选组件
  • Java 运行时(例如 brew install openjdk)可让 OPSIN 离线解析系统 IUPAC 名称,包括数据库中没有索引的名称。没有 Java 时,解析器会继续使用 PubChem/NCI 在线查询。
  • AnkiConnect 插件可让 export_anki_deck 将卡片直接推送到正在运行的 Anki 中。没有它,你会得到 .apkg 文件,需要自行导入。
  • ChemDraw(macOS)绝非必需:如果你想继续在其中编辑,可请求 formats=["cdxml"],然后自行打开文件。
无法正常工作?运行诊断工具
chemdraw-doctor                            # after "uv tool install chemdraw-mcp"
uv run chemdraw-doctor                     # in the cloned repo
uvx --from chemdraw-mcp chemdraw-doctor    # without installing anything

建议首先尝试此操作——它能将“服务什么也不做”转化为明确的原因。它会检查导致服务在聊天中看起来毫无响应的六项内容(RDKit 渲染、Java/OPSIN 运行时、uv 路径、Claude Desktop 条目、名称数据库、输出目录),并针对每个问题打印出修复它的确切命令。诊断结果分为三个级别:[OK]、[LIMITED](可用,但受限)和 [FAIL](故障);[NOTE] 表示不适用的检查,例如未安装 Claude Desktop。只要服务可用,退出代码就保持为 0,因此可以在脚本中运行。(通过 PyPI 安装时,uv 和 Claude Desktop 检查会报告 [NOTE]——这些检查与仓库安装程序有关。)

局限性

先说明在前,避免报告中出现意外:

  • Java 是可选的,但需要付出代价。 如果没有 JRE,OPSIN 将被跳过,名称会通过 PubChem/NCI 在线解析——因此,名称查询需要互联网连接,而且仅适用于这些数据库收录的名称。 SMILES 输入不会访问网络。
  • 光谱是示意图。 generate_spectrum 会绘制传入的峰,并采用适用于该光谱类型的坐标轴约定。它不会测量或预测任何内容——如果峰值来自聊天内容而非仪器,请在将其写入报告前进行核实。
  • TLC 强度只是绘图提示。 可选参数 intensity(0…1)用于让示意图中的斑点颜色变浅。它不是密度测定,也不具有定量意义。
  • CDXML 是辅助输出。 它根据 RDKit 分子生成,并经过往返验证;但 PNG/SVG 才是主要输出,也是像素测试覆盖的格式。CDXML 默认关闭,且仅适用于结构和反应方案——TLC 板、反应范围图和光谱不支持该格式。
  • 3D 仅使用一个构象。 generate_3d 使用 ETKDGv3 嵌入构象,并使用 MMFF 进行优化(无法使用时则回退到 UFF)。生成的几何结构适合查看,但这并非构象搜索,也不代表能量结论。
  • ChemDraw 桥接功能仅适用于 macOS,并且需要在本地安装 ChemDraw。其他所有功能均无需它。

工作原理

name / SMILES
   │
   ▼
resolver ──► OPSIN (systematic IUPAC names, offline) ──► PubChem / NCI (names)  ·  direct parse (SMILES)
   │
   ▼
RDKit 2D coordinates ──► validation (sanity, round-trip)
   │
   ├──► image_export   → PNG + SVG files          (primary, offline)
   ├──► svg_renderer   → interactive chat preview (MCP App resource)
   └──► cdxml_writer   → ChemDraw CDXML           (optional, on request)

开发

Python 3.11+,包管理器为 uv。

uv sync                      # backend deps
cd chemdraw_tool/ui && npm install && npx playwright install chromium  # frontend, once
./test.sh                    # the gate: pytest + JS unit + headless-Chromium e2e

600 多项测试,采用测试优先的方式编写。端到端测试会在无头 Chromium 中栅格化真实的 RDKit SVG,并与精确的像素快照进行比较——导出路径和聊天中的预览使用相同的绘图常量。

反馈、错误报告和愿望

本项目面向学生,后续开发方向取决于你遇到的问题。

  • 遇到问题了?提交错误报告—— 表单会要求提供 chemdraw-doctor 的输出,它能在大多数问题被提出前就给出答案。
  • 课程中缺少某项功能?告诉我们你想绘制或计算什么—— 请说明主题和考试题目;这比只提供一个功能名称更有帮助。
  • **化学内容有误?**请使用错误报告表单,并注明化合物和图示。这里最重要的是结构正确。
  • 有问题,或想分享你用它做的东西?讨论区——“展示与分享”是分享用途的地方。
  • **觉得好用?**在仓库点一个 ⭐ 是本项目唯一的分析数据来源。

许可证

Apache-2.0——详见 LICENSE。版权所有 2026 jurimaxam-dotcom。

**免责声明:**本项目为非官方独立项目,与 Revvity 无关联,也未获其认可。 ChemDraw 是 Revvity Signals Software, Inc. 的商标。本工具不包含 ChemDraw,也不要求安装 ChemDraw;但可选择导出为开放的 CDXML 格式文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。