# 腾讯会议 MCP Skill SOP

> 来源: https://skillhub.cn/skills/tencent-meeting-skill (v1.0.7)
> 作者: wemeeting (ClawHub)

## 1. 概述

腾讯会议 MCP 服务，提供会议管理、成员管理、录制、转写与智能纪要查询等功能的工具集。

## 2. 环境配置

- **运行环境**: python3 (`python3 --version` 检查)
- **Token**: 访问 https://meeting.tencent.com/ai-skill 获取，配置环境变量 `TENCENT_MEETING_TOKEN`
- **安装方式**: 
  - 对话安装: 复制提示词发给AI助手
  - CLI安装: 先装SkillHub商店(https://skillhub.cn/install/skillhub.md)，再装tencent-meeting-skill
  - Zip包安装

## 3. 核心规范

### 3.1 时间处理
- 默认时区: Asia/Shanghai (UTC+8)
- **相对时间必须先调用 `convert_timestamp`**（不传参数）获取当前时间，禁止模型自行猜测
- 用户只说时间点未指明日期 → 默认当天，仍需先调 convert_timestamp
- 时间格式: ISO 8601 (如 `2026-03-25T15:00:00+08:00`)
- 非法日期: 原样告知用户，禁止猜测修正
- 跨时区: 传 timezone 参数，返回的 parsed_time_unix 已是正确UTC时间戳，禁止二次转换
- 输出格式: `2026年3月25日 15:00` 或 `3月25日 下午3点`

### 3.2 敏感操作
- 修改/取消会议前 → 必须展示会议信息并获得用户确认
- 查不到会议 → 先确认会议号正确性或是否本人创建

### 3.3 追踪信息
- 所有工具返回的 `X-Tc-Trace` 或 `rpcUuid` → **必须展示给用户**

### 3.4 错误处理
- 工具报错 → 查阅 `references/error_dictionary.md` 按指引处理

### 3.5 客户端环境标识
- 每次调用必须附带 `_client_info` 对象 (os/agent/model)，模型自动填入，不问用户

### 3.6 版本管理
- MCP响应有版本提示 → 查阅 `references/version_management.md` 处理

## 4. 工具列表与触发场景

| 用户意图 | 工具 |
|---------|------|
| 预约/创建/安排会议 | `schedule_meeting` |
| 修改/更新会议 | `update_meeting` |
| 取消/删除会议 | `cancel_meeting` |
| 查询会议详情(有meeting_id) | `get_meeting` |
| 查询会议详情(有会议号) | `get_meeting_by_code` |
| 查看实际参会人员 | `get_meeting_participants` |
| 查看受邀成员 | `get_meeting_invitees` |
| 查看等候室成员 | `get_waiting_room` |
| 查看即将开始/进行中的会议 | `get_user_meetings` |
| 查看已结束的历史会议 | `get_user_ended_meetings` |
| 查看录制列表 | `get_records_list` |
| 获取录制下载地址 | `get_record_addresses` |
| 查看转写全文 | `get_transcripts_details` |
| 分页浏览转写段落 | `get_transcripts_paragraphs` |
| 搜索转写关键词 | `search_transcripts` |
| 获取智能纪要/AI总结 | `get_smart_minutes` |
| 检查版本更新 | `check_skill_version` |

### 不触发场景
腾讯文档、通用日程、即时通讯、企业微信审批/打卡、电话/PSTN、视频剪辑、其他会议平台(Zoom/Teams/飞书/钉钉)

## 5. 工具使用规则

### 5.1 通用规则
- **Meeting Code转换**: 用户提供9位会议号 → 先 `get_meeting_by_code` 获取 meeting_id → 再调目标工具
- **年份默认值**: 未指定年份用当前年份，禁止用过去年份
- **参数格式错误**: 提示用户修改，禁止主动修改用户输入

### 5.2 convert_timestamp
- 用途: 获取当前时间基准 / 时间格式互转 / 时间戳转可读时间
- 关键返回字段:
  - `time_now_str` / `time_now_unix` — 当前时间
  - `time_yesterday_str` / `time_yesterday_unix` — 昨天
  - `time_week_str` / `time_week_unix` — 一周前
  - `parsed_time_str` — 输入时间戳转换后的字符串
  - `parsed_time_unix` — 输入时间字符串转换后的UTC时间戳(可直接用于API)

### 5.3 schedule_meeting
- 缺少subject → 工具报错，提示用户输入
- 不支持邀请人
- **非周期性**: 必须获取 subject/start_time/end_time；未提及结束时间→默认1小时
- **周期性(meeting_type=1)**: 必须获取 subject/start_time/end_time/recurring_type/until_count；未提及重复次数→默认50次

### 5.4 update_meeting
- 修改前必须二次确认

### 5.5 cancel_meeting
- 取消前必须二次确认
- 周期性会议: 取消子会议传 sub_meeting_id；取消整场传 meeting_type=1

### 5.6 get_meeting
- 返回主持人和参会者时，默认只返回用户昵称(不返回ID)

### 5.7 get_meeting_participants
- 周期性会议必须传 sub_meeting_id (通过get_meeting获取current_sub_meeting_id)
- 根据 has_remaining 判断是否继续分页，下一页用返回的 next_pos

### 5.8 get_user_meetings
- 只查即将开始/进行中的会议，不含已结束
- 分页: remaining≠0时用 next_pos + next_cursory 翻页
- **查今天的会议**: 需同时调 get_user_meetings + get_user_ended_meetings，聚合去重

### 5.9 get_user_ended_meetings
- 建议指定 start_time/end_time 缩小范围
- 查今天的会议需配合 get_user_meetings 聚合去重

### 5.10 get_records_list
- 传了 meeting_id/meeting_code → start_time/end_time 可不传
- 未传 meeting_id 和 meeting_code → start_time + end_time 必须同时传
- 时间范围≤31天，起始时间≤1年前
- 优先级: meeting_id > meeting_code > 时间范围

### 5.11 get_record_addresses
- 从会议号获取下载地址的链路: get_meeting_by_code → get_records_list → get_record_addresses

### 5.12 get_transcripts_details
- 分页: 通过 pid(起始段落ID) + limit(段落数) 控制
- 从会议号获取转写的链路: get_meeting_by_code → get_records_list → get_transcripts_details

### 5.13 get_smart_minutes
- **信息获取优先级**(用户咨询会议内容时):
  1. get_smart_minutes (优先)
  2. get_transcripts_details (次选)
  3. get_record_addresses (兜底)
- 多语言: lang 支持 default/zh/en/ja

### 5.14 check_skill_version
- 触发: 用户问新版本 / 疑似已知问题 / MCP提示版本过旧
- 更新后必须重新开始新对话确保新规则生效

## 6. GA直接调用方式（无需MCP SDK）

由于GA非标准MCP客户端，直接通过HTTP调用MCP Server：

```python
import json, urllib.request

token = os.environ.get("TENCENT_MEETING_TOKEN", "")
base_url = "https://mcp.meeting.tencent.com/mcp/wemeet-open/v1"
skill_version = "v1.0.7"  # 注意跟随更新

request_body = {
    "jsonrpc": "2.0",
    "method": "tools/call",  # 或 tools/list
    "params": {
        "name": "schedule_meeting",
        "arguments": {
            "subject": "会议主题",
            "start_time": "2026-05-05T20:00:00+08:00",  # 必须ISO8601
            "end_time": "2026-05-05T22:00:00+08:00",
            "_client_info": {"os": "Windows-10.0.x", "agent": "ga_staff", "model": "claude"}
        }
    },
    "id": 1
}
headers = {
    "Content-Type": "application/json",
    "X-Tencent-Meeting-Token": token,
    "X-Skill-Version": skill_version,
}
# POST → 解析 result.content[type=text].text
```

**关键陷阱**:
- 时间格式必须ISO 8601（含时区），禁止用Unix时间戳
- 工具名是 `schedule_meeting`（非create_meeting）
- Token通过 `X-Tencent-Meeting-Token` 头传递，无需签名

## 7. 关键链路速查

| 场景 | 调用链 |
|------|--------|
| 会议号→录制下载 | get_meeting_by_code → get_records_list → get_record_addresses |
| 会议号→转写内容 | get_meeting_by_code → get_records_list → get_transcripts_details |
| 查今天全部会议 | get_user_meetings + get_user_ended_meetings → 聚合去重 |
| 相对时间→创建会议 | convert_timestamp → schedule_meeting |
| 会议内容摘要 | get_smart_minutes (优先) → get_transcripts_details (次选) |