CRM 数据只读操作的最终兜底执行技能(最低优先级),覆盖对象识别、对象/字段描述、关系查看与记录读取。 自然语言 CRM 查询、语义解析与统计报表优先使用 semantic-interpreter,本技能仅在其不可用、或请求已是包含 apiName 的结构化读取、或已选能力明确要求回退时使用。 不处理语义解释、统计聚合、报表分析、多跳关系推断及写操作。 所有工具调用通过 template-mcp 连接器执行,每个工具需传入固定 apiName 参数标识真实执行操作。
Scanned 9/8/2026
Install to Claude Code
npx -y skills add infometa/workbuddyskills --skill data-read --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Data Read?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/infometa-data-read)More formats (shields.io, HTML) on the badges page.
---
name: "data-read"
description: |
CRM 数据只读操作的最终兜底执行技能(最低优先级),覆盖对象识别、对象/字段描述、关系查看与记录读取。
自然语言 CRM 查询、语义解析与统计报表优先使用 semantic-interpreter,本技能仅在其不可用、或请求已是包含 apiName 的结构化读取、或已选能力明确要求回退时使用。
不处理语义解释、统计聚合、报表分析、多跳关系推断及写操作。
所有工具调用通过 template-mcp 连接器执行,每个工具需传入固定 apiName 参数标识真实执行操作。
apiName: "data_read_mcp"
---
# CRM data 基础只读操作
## 路由与使用原则
读取本技能不代表允许执行。在调用任何工具前,先完成以下检查:
1. 自然语言 CRM 数据查询默认由 semantic-interpreter 承担;若其在当前技能清单中,优先使用之,不得直接调用下方工具。
2. 只根据当前会话已提供的技能 name 和 description 判断,不逐个加载候选技能试探;存在其他明确覆盖本次请求的查询/分析能力时,改用该能力。
3. 仅当技能清单中无更匹配能力、或已选能力已尝试但明确无法完成、或请求已是包含 apiName 的结构化读取时,才执行下方工具。
4. 仅处理对象识别、对象描述、直接关系查看与记录读取;不执行或发现写操作和 SQL;语义解释、统计聚合、报表分析、多跳关系推断、原因分析均不属于本技能。
5. 使用最短有效调用链,当前结果已经能够回答用户时立即停止。
## 使用原则
1. 仅处理对象识别、对象描述、直接关系查看和记录读取;不执行或发现写操作和 SQL。
2. 只做单步或短链路基础读取;需要多跳拼装、跨记录证据核对或解释性结论时,不属于本技能。
3. 使用最短有效调用链,当前结果已经能够回答用户时立即停止。
## 复用已有上下文
按以下顺序确定对象:
1. 用户当前请求明确提供 `objectApiName` 时,直接使用。
2. 用户只提供业务对象名称时,只有当前对话、已有工具结果或运行时上下文中存在该名称到 `objectApiName` 的精确映射,才直接复用;否则将该名称作为 `identify-with-describe` 的线索,且最多识别一次。
3. 未提供对象信息时,使用用户原始问题调用一次 `data_describe_identify-with-describe`。
用户当前输入优先于已有上下文。存在多个候选或对象指代无法唯一确定时,向用户澄清,不猜测。
已知 `objectApiName` 时,不再调用 `data_describe_identify-with-describe`。只有后续查询需要字段信息且现有描述不足时,才调用 `data_describe_get`。已有描述包含所需字段时,不重复获取描述。
## 选择最短工具
| 查询目标 | MCP 工具 | 固定 apiName |
|---|---|---|
| 识别业务对象 | `data_describe_identify-with-describe` | `IdentifyObjectWithDescribe` |
| 获取对象描述 | `data_describe_get` | `GetObjectDescribe` |
| 查看对象关联范围 | `data_describe_list-related` | `ListRelatedObjects` |
| 查询两个对象的关系路径 | `data_describe_query-relation-paths` | `QueryRelationPaths` |
| 按名称查询候选记录 | `data_record_query-by-name` | `QueryRecordByName` |
| 按名称查询记录 ID | `data_record_query-id-by-name` | `QueryRecordIdByName` |
| 按对象和 ID 获取详情 | `data_record_get-by-id` | `GetRecordById` |
| 按字段条件查询记录 | `data_record_query-by-fields` | `QueryRecordsByFields` |
前一个工具的结果已经能够回答用户时,不调用后续工具。
> **重要**:每个 MCP 工具调用时必须传入 `apiName` 参数,值为上表中对应的固定标识,否则工具无法正确执行。
## 对象描述与关系
对象无法从已有上下文确定时,使用用户原始问题识别对象。对象已知但缺少下一步所需字段信息时,获取简版描述。
### 识别业务对象 — `data_describe_identify-with-describe`
根据用户输入的对象术语、简称或业务短语识别对应业务对象;结果唯一收敛时同时返回简版描述。
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `IdentifyObjectWithDescribe` |
| `query` | string | 否 | 待识别的对象术语、简称或短句,例如 `客户`、`联系人` |
| `include_simple_describe` | boolean | 否 | 是否补充简版对象描述,默认 `true` |
| `object_api_names` | string[] | 否 | 候选对象范围,用于减少歧义 |
| `include_few_shots` | boolean | 否 | 是否返回 few-shot 示例 |
| `few_shot_type` | string | 否 | few-shot 类型过滤 |
调用示例:
```json
{
"apiName": "IdentifyObjectWithDescribe",
"query": "<用户原始问题>",
"include_simple_describe": true
}
```
返回 `resolution_status` 为 `RESOLVED` 时表示唯一识别;`AMBIGUOUS` 时需向用户澄清。
### 获取对象描述 — `data_describe_get`
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `GetObjectDescribe` |
| `object_api_name` | string | 否 | 业务对象唯一标识,例如 `AccountObj` |
| `simple_describe` | boolean | 否 | 传 `true` 返回轻量 `field_list`,过滤禁用字段和选项 |
| `include_few_shots` | boolean | 否 | 是否返回 few-shot 示例 |
| `few_shot_type` | string | 否 | few-shot 类型过滤 |
调用示例:
```json
{
"apiName": "GetObjectDescribe",
"object_api_name": "<ObjectApiName>",
"simple_describe": true
}
```
### 查看对象关联范围 — `data_describe_list-related`
返回指定对象可直接联查的关联对象边信息。
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `ListRelatedObjects` |
| `objectApiName` | string | 否 | 当前已确认的主对象 apiName |
调用示例:
```json
{
"apiName": "ListRelatedObjects",
"objectApiName": "<ObjectApiName>"
}
```
### 查询关系路径 — `data_describe_query-relation-paths`
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `QueryRelationPaths` |
| `source_object_api_name` | string | 是 | 起点对象 apiName |
| `target_object_api_name` | string | 是 | 目标对象 apiName |
| `question` | string | 否 | 用户原始问题,辅助判断关系链路 |
调用示例:
```json
{
"apiName": "QueryRelationPaths",
"source_object_api_name": "<SourceObjectApiName>",
"target_object_api_name": "<TargetObjectApiName>",
"question": "<用户原始问题>"
}
```
## 记录读取
按名称查询记录时,优先传入已经确认的对象范围。对象范围未知时,先识别对象。
### 按名称查询记录 — `data_record_query-by-name`
将实体名称归一到具体业务记录,按名称模糊匹配返回候选记录列表。
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `QueryRecordByName` |
| `name` | string | 否 | 待归属的记录名称 |
| `object_api_names` | string[] | 否 | 候选对象范围 |
调用示例:
```json
{
"apiName": "QueryRecordByName",
"name": "<记录名称>",
"object_api_names": ["<ObjectApiName>"]
}
```
### 按名称查询记录 ID — `data_record_query-id-by-name`
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `QueryRecordIdByName` |
| `query` | string | 是 | 对象数据名称关键词 |
| `apiNames` | string[] | 否 | CRM 对象 apiName 列表 |
调用示例:
```json
{
"apiName": "QueryRecordIdByName",
"query": "<名称关键词>",
"apiNames": ["<ObjectApiName>"]
}
```
### 按对象和 ID 获取详情 — `data_record_get-by-id`
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `GetRecordById` |
| `object_api_name` | string | 是 | 对象唯一标识 |
| `id` | string | 是 | 目标记录的唯一 ID |
调用示例:
```json
{
"apiName": "GetRecordById",
"object_api_name": "<ObjectApiName>",
"id": "<记录ID>"
}
```
`query-by-name` 返回的信息已经能够回答用户时,不再调用 `get-by-id`。只需要记录 ID 时,使用 `query-id-by-name`。
## 按字段条件查询
字段名称必须来自已有对象描述的 `field_list[].api_name`。只选择用户需要的字段,并设置较小且合理的 `limit`(建议默认 10)。
### 运算符适用范围
```text
text: eq/n/like/in
number/date/datetime: eq/n/gt/gte/lt/lte/between/in
boolean: eq/n
array: in
```
`n` 表示不等于。`in` 使用数组传入多个值,`between` 使用数组 `[起始值, 结束值]` 传入。多个字段条件默认使用 AND 连接。
### 按字段条件查询 — `data_record_query-by-fields`
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `apiName` | string | 是 | 固定值 `QueryRecordsByFields` |
| `object_api_name` | string | 否 | 主对象 apiName |
| `select_fields` | string[] | 否 | 返回字段列表 |
| `search_template_query` | object | 否 | 结构化查询模板(见下方) |
| `need_count` | boolean | 否 | 是否返回总数 |
`search_template_query` 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| `filters` | array | 过滤条件列表 |
| `filters[].field_name` | string | 字段 apiName |
| `filters[].field_values` | string[] | 字段值数组(`in` 多值,`between` 双值) |
| `filters[].operator` | string | 运算符:eq/n/like/in/gt/gte/lt/lte/between |
| `filters[].connector` | string | 条件连接符:AND / OR |
| `filters[].value_type` | integer | 值类型标识 |
| `orders` | array | 排序条件列表 |
| `orders[].fieldName` | string | 排序字段 apiName |
| `orders[].isAsc` | boolean | `true` 升序,`false` 降序 |
| `limit` | integer | 返回条数限制 |
调用示例 — 按名称模糊查询客户:
```json
{
"apiName": "QueryRecordsByFields",
"object_api_name": "AccountObj",
"select_fields": ["name", "owner"],
"search_template_query": {
"filters": [
{
"field_name": "name",
"field_values": ["华为"],
"operator": "like",
"connector": "AND"
}
],
"limit": 10
}
}
```
调用示例 — 多条件查询并排序:
```json
{
"apiName": "QueryRecordsByFields",
"object_api_name": "AccountObj",
"select_fields": ["name", "owner", "created_at"],
"search_template_query": {
"filters": [
{
"field_name": "name",
"field_values": ["华为"],
"operator": "like",
"connector": "AND"
},
{
"field_name": "created_at",
"field_values": ["2024-01-01", "2024-12-31"],
"operator": "between",
"connector": "AND"
}
],
"orders": [
{
"fieldName": "created_at",
"isAsc": false
}
],
"limit": 10
},
"need_count": true
}
```
关联对象、人员和部门字段应先解析为可用 ID。枚举字段值必须来自对象描述中的合法选项。
## 错误处理
正文已经提供所需参数时,直接执行工具调用,不预先探查工具能力。
只有目标工具返回未知参数、不支持的格式或运行时版本不兼容错误时,才检查该工具的参数定义。不得枚举其他工具来试探能力。
查询成功但没有结果时,报告空结果并停止。不得放宽条件、更换对象、扩大时间范围或为了探索而重试。工具执行失败时,只针对明确错误修正参数,不得盲目重试。
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!