---
name: cmwa-quote
display_name: 招财多元宝
display_name_en: CMWA Multi-Linked Quote
version: 1.4.1
category: 投资理财
author: 招商财富
description: 招商财富多元挂钩业务场外衍生品询价报价工具。当用户提到「询价」「报价」「待报价结构」「拉取询价单」「今日询价」「招财多元宝」或需要处理场外衍生品询价流程时使用，可查询询价、提交报价、导出询价单，并打开询价报价供用户操作。首次查询会打开询价报价，后续查询直接以表格给出数据。
description_zh: 招商财富多元挂钩业务场外衍生品询价报价工具。当用户提到「询价」「报价」「待报价结构」「拉取询价单」「今日询价」「招财多元宝」或需要处理场外衍生品询价流程时使用，可查询询价、提交报价、导出询价单，并打开询价报价供用户操作。首次查询会打开询价报价，后续查询直接以表格给出数据。
description_en: CMWA multi-linked business OTC derivatives inquiry and quote tool. Use when the user mentions inquiry, quote, pending quote structures, or needs to process OTC derivatives inquiry workflows. Queries inquiries, submits quotes, and exports inquiry sheets, and opens the inquiry workbench page for the user to operate. The first query opens the inquiry workbench page; subsequent queries return the data as a table.
agent_created: true
---

# 招财多元宝 MCP Skill

当用户提到「**询价**」「**报价**」「**待报价**」「**今日询价**」「**招财多元宝**」，或给出询价结构、需要处理场外衍生品询价报价流程时，读取本 Skill。

---

## ⛔ MANDATORY RULES — 必须遵守

### 规则 0（最高优先级）：对外只谈业务，技术实现一律不暴露

**规则 0 覆盖其余所有规则。** 本文档及 `references/` 里的工具名、字段名、协议术语、面板标识，
都是**给你内部执行用的**，**禁止出现在任何用户可见文字里**。

对用户只说两件事：**业务事实** + **下一步能做什么**。

**禁止出现的词（示例，非穷举）**：

| 类别 | 禁止对用户说 | 应说 |
|------|------------|------|
| 工具名 | `openWorkbench`、`queryTraderQuote`、`bathInsertTraderQuote`、`exportExcel` | 「打开询价报价」「查询」「提交报价」「导出」 |
| 协议 / 宿主术语 | MCP、MCP App、UI 资源、`structuredContent`、`items`、`content`、`isError`、`_meta`、`resourceUri`、AppBridge、沙箱 | （完全不说） |
| 面板标识 | `ui://cmwa-quote/workbench`、面板 URL、实例 ID | 「下方面板」「询价列表」 |
| 字段名 / 代码值 | `quoteStat`、`inquiryState`、`consultRecordId`、`yield`、`maxScale`、`deadlineDate`、`traderWechatId`、`Y`/`N`、含 `===` 的表达式 | 「未报价」「已报价」「询价中」「已结束」「收益率」「规模」「截止时间」「券商信息」 |
| 内部机制 | 缓存、进程、端口、超时、token、OAuth、授权码、CSP、CORS、跨域、SDK、解析、回传通道 | （完全不说） |
| 实现说明 | 「明细不走文本通道」「数据在结构化字段里」「接口返回了」「本次调用环境下……」 | （完全不说） |
| 路径与地址 | 日志路径、文件路径、本地地址、内网 IP / 主机名、仓库目录 | （完全不说） |

**业务侧可以正常说**：询价条数、标的名称、结构名、期限、截止时间、规模、收益率、是否已报价、
询价状态、备注、导出文件名。这些是用户自己的业务数据，不算技术细节。

**判断准则**：拿不准某个词能不能说 → **不说**。
需要解释「为什么看不到数据」时，只给业务结论（「列表暂无数据」），**不要**解释成因机制。

---

### 规则 1–5

1. **遇到 401 / 连接断开**：立即停止重试，读取 `references/setup.md` 引导重新授权，不得反复重试。
   **对用户只说「当前无法获取数据，请检查授权状态」**，不要转述状态码、端点、授权流程等技术细节。
2. **报价是写操作**：提交前必须回显关键信息（结构、收益率、备注）让用户确认，禁止未确认直接提交。
3. **字段中文化**：渲染与提问必须用 `references/field-dictionary.md` 把代码翻译成中文，禁止向用户展示原始英文代码。
   ⚠️ 「展示中文」指展示**值**，不展示**字段名**。
4. **强制检索 + 首次开询价报价**：用户提到「查今日询价 / 待报价」时，必须先取实际数据，不得凭空回答。
   - **本对话第一次**问询价 → 调 `openWorkbench`，让询价报价打开一次
     （用户此前不知道有这个页面，需要这一眼）。**同一条回复里不要再调 `queryTraderQuote`**
     —— 页面会自己取数，避免一次交互开出两扇；
   - **已打开过之后**（含用户再问一次、再问十次）→ **只调 `queryTraderQuote`**，
     在回复里用**表格**呈现待报价条目（标的、结构、期限、截止时间、规模、是否已报价），
     **并在表格后固定附一句征询**：**「需要我再次打开询价报价吗？」**
     —— 用户回「要 / 打开」才调 `openWorkbench`；用户不回或回「不用」就**不要**打开；
   - 用户**明确**说「打开询价报价 / 我要填报价」→ 调 `openWorkbench`（用户点名的，允许再开一次）。
5. **deadlineDate 截止后**：超过报价截止时间的结构不再询问/提交。

---

### ★ 规则 6（状态极简，只看自己的上文）：首次开询价报价，之后回表格 + 每次问一句

**本对话是否已经打开过询价报价** —— 这是本 Skill 里**唯一**需要你记住的状态，一个布尔值，
只看**自己的对话上文**即可判断，不需要问用户、也不依赖任何外部状态。

| 情形 | 动作 | 回复 |
|---|---|---|
| **首次**问「今日询价 / 待报价」 | 调 `openWorkbench`（**只调它**） | 「今日询价已拉取完成，询价列表已显示在下方面板中。」 |
| **已打开过**后再问 | 调 `queryTraderQuote`（**不调** `openWorkbench`） | **表格**给出待报价条目 + 一句结论 **+ 结尾固定问「需要我再次打开询价报价吗？」** |
| 用户回答「要 / 打开」 | 调 `openWorkbench` | 「询价报价已打开。」 |
| 用户回答「不用 / 不需要」 | 什么都不做 | 正常继续作答，**不要再问第二遍** |
| 用户**明确**说「打开询价报价 / 我要填报价」 | 调 `openWorkbench` | 「询价报价已打开。」 |
| 说「导出询价」 | 调 `exportExcel`，把文件直接交给用户 | 「询价单已导出。」（附文件名） |

**★ 「每次问一句」是本规则的硬要求**：

- 只要本次回复走的是「`queryTraderQuote` + 表格」这条路，**结尾就必须带上那句征询**，
  不能省、不能改成「见下方面板」，也**不能**因为用户上一条已经拒绝过就不再问
  —— 用户随时可能改主意。
- 征询文案**固定用**：**「需要我再次打开询价报价吗？」**（一句，问号结尾，不展开解释）。
- ⚠️ **问 ≠ 开**：问完这一句**绝不能**顺手把页面打开 —— 必须等用户明确回应。
- ⚠️ 这一句是**问句**，不是反问、不是暗示，也不要说「如需查看请告诉我」这类被动说法。

⚠️ **为什么必须这样分流**：询价报价**每打开一次就是一扇新的**，不会复用。你重复调 `openWorkbench`
或让页面反复触发带页面的查询，都会让用户面前多出一扇面板 —— 这正是我们要避免的。
所以：**带页面的那个动作，只在「首次」或「用户明确要」时做。**

⚠️ **不要为了「同步最新数据」重复打开询价报价**。页面打开后会自己刷新（顶栏有「刷新」按钮），
数据始终是新的。

---

### ★ 话术对照（照这个风格说）

调工具**不要先声明**「我要调用某某工具」，直接给业务结论。

❌ **错误**（技术泄漏）：
> 已调用 queryTraderQuote，返回查询完成，即今日询价数据已拉取成功。
> 数据已回传给询价报价面板（cmwa-quote MCP App，ui://cmwa-quote/workbench），请直接查看界面上内嵌渲染的询价列表
> ——本次调用环境下明细不走文本通道回传，所以聊天里看不到条目明细，这不代表没数据。

✅ **正确**（**后续**查询，回表格 + **结尾必须问一句**）：
> 今日待报价共 5 条：
>
> | 标的 | 结构 | 期限 | 截止时间 | 规模 | 状态 |
> |---|---|---|---|---|---|
> | 恒生科技 | 日观分段雪球（早利结构） | 24 个月 | 2026-09-30 23:59 | 2,000 | 未报价 |
>
> 需要我再次打开询价报价吗？

❌ **错误**（后续查询没问那一句）：
> 今日待报价共 5 条。（表格略）——**结束，没问用户要不要打开页面**

❌ **错误**（问完顺手打开了）：
> 需要我再次打开询价报价吗？*（同时调了 `openWorkbench`）*

> ⚠️ 表格里**只放业务值**（标的、结构、期限、截止时间、规模、是否已报价），
> **不要**出现字段名、`Y`/`N`、判断式。

❌ **错误**（字段名 / 代码泄漏）：
> 待报价 = inquiryState === '询价中' 且 quoteStat === 'N' 的条目，共 5 条。

✅ **正确**：
> 待报价共 5 条。

❌ **错误**（内部机制泄漏）：
> 页面命中了宿主缓存，需要重启客户端才能加载新版本。

✅ **正确**：
> 页面未能加载最新内容，请重启客户端后重试。

---

## 📋 意图路由表

根据用户意图，Read 对应参考文件：

| 用户意图 | 读取文件 | 典型触发词 |
|---------|---------|-----------|
| 配置 / 授权 / 401 / token 过期 | `references/setup.md` | 「配置」「授权」「连不上」「401」「token 过期」 |
| 查询询价 / 待报价（**本对话首次**） | `references/workbench.md` | 「查今日询价」「待报价」「拉取询价单」**且本对话未打开过询价报价** |
| 查询询价 / 待报价（**已打开过**） | `references/query.md` | 同上意图，但**已打开过** → 回表格 **+ 结尾问「需要我再次打开询价报价吗？」** |
| 用户回答「要 / 打开」 | `references/workbench.md` | 「要」「打开」「好」「可以」 |
| 用户回答「不用 / 不需要」 | —（不调任何工具） | 「不用」「不需要」「先不用」 |
| 报价 / 提交报价 | `references/quote.md` | 「报价」「提交报价」 |
| 导出 | `references/export.md` | 「导出」「Excel」 |
| 打开询价报价（显式要求） | `references/workbench.md` | 「打开询价报价」「询价报价」「我要填报价」 |
| 字段翻译 / 结构代码 | `references/field-dictionary.md` | 由上述模块内部引用 |

> 「首次 / 已打开过」这一对判断，是唯一依赖上文状态的地方（见规则 6）。判断不了时**按首次处理**
> ——多开一扇面板的代价，远小于用户看不到询价报价。

---

## 🔑 凭证检查

**两条鉴权线，统一由 WorkBuddy 托管 token：**

| 线 | 用途 | token 由谁持有 |
|---|---|---|
| AI 调 MCP 工具 | 查询 / 报价 / 导出 | WorkBuddy 连接器 OAuth（自动带） |
| 页面点按钮 | 询价报价操作 | MCP Apps（AppBridge 调工具，WorkBuddy 自动带） |

执行任何招财多元宝操作前，通过调 `queryTraderQuote` 验证 MCP 连接状态：

```
调 queryTraderQuote
 → 成功：返回询价数据，继续执行
 → 401：读取 references/setup.md，引导重新授权（点续期/授权，无需重新配置）
 → 连接失败：读取 references/setup.md，引导完成初始配置
```

---

## 📚 参考文件索引

> **按需加载**：根据意图路由表，只 Read 对应文件，无需一次性加载全部。

| 文件 | 职责 |
|------|------|
| `references/setup.md` | Token 配置、OAuth 授权、401/token 过期处理、故障排查 |
| `references/query.md` | 查询询价（queryTraderQuote）、表格展示、字段展示 |
| `references/quote.md` | 报价提交（bathInsertTraderQuote）、报价字段映射 |
| `references/export.md` | 导出 Excel（exportExcel） |
| `references/workbench.md` | 询价报价（首次打开、筛选、报价操作） |
| `references/field-dictionary.md` | 报文字段词典、结构代码、观察频率代码 |

---

## ✅ 回复自检（发给用户前必过）

逐条自问，任一为「是」就重写：

1. 出现工具函数名（`openWorkbench` / `queryTraderQuote` / `bathInsertTraderQuote` / `exportExcel` 等驼峰英文标识）？
2. 出现 `MCP` / `App` / `UI 资源` / `结构化` / `字段` / `通道` / `缓存` / `端口` / `token` / `授权码` / `跨域` / `CSP` 等技术词？
3. 出现 `ui://` 开头的 URI、面板地址、实例 ID、文件路径、IP？
4. 出现英文字段名、`Y`/`N` 代码、含 `===` 的表达式？
5. 在解释「为什么看不到 / 为什么失败」的机制，而不是只给业务结论？

**回复模板**：

| 场景 | 话术 |
|------|------|
| 查询成功（**首次**，询价报价已打开） | 今日询价已拉取完成，列表见下方面板。 |
| 查询成功（**后续**，回表格） | （表格）+ 今日待报价共 N 条。 **+「需要我再次打开询价报价吗？」** |
| 用户说要打开 | 询价报价已打开。 |
| 用户说不用 | （不调工具，正常继续） |
| 查询为空 | 已查询，当前没有待报价条目。 |
| 获取失败 | 暂时无法获取数据，请稍后重试或检查授权状态。 |
| 提交成功 | 已提交 N 条报价。 |
| 导出成功 | 询价单已导出。 |

---

> Skill version: **1.4.1**
>
> > 版本号在**三份副本间已对齐**（项目 `cmwa-quote-mcp-skill/`、`connector/skills/cmwa-quote/`、
> > 用户级 `~/.workbuddy/skills/cmwa-quote/`）。历史条目按各自实际改动保留。
>
> - 1.4.1：**征询文案定稿** —— 固定为「需要我再次打开询价报价吗？」；
>   面向用户的文案一律用「询价报价」四字，不再附加「页面」等修饰。
> - 1.4.0：**后续每次查询都要在结尾问一句**是否要打开 ——
>   规则 6 新增「每次问一句」硬要求（问 ≠ 开，必须等用户回应）；
>   意图路由表新增「用户回答要/不要」两行；回复模板同步。
>   另：全项目统一术语 —— 用户可见的中文表述统一为「询价报价」，不再使用旧称。
> - 1.3.0：**首次查询打开询价报价、后续查询回表格** —— 新增规则 6（状态只看上文一个布尔）、
>   新增 `openWorkbench` 工具与「首次 / 已打开过」双路意图、导出改为直接交付文件。
>   目的：避免每次查询都重复内嵌一个询价报价。
> - 1.2.0：新增「规则 0 · 对外只谈业务」与回复自检 —— 明确**禁止向用户暴露工具名、字段名、
>   面板 URI、协议术语与内部机制**；技术术语仅供内部执行使用。
> - 1.1.0：初版。
