MCP服务集成
1. MCP基本概念
1.1 什么是MCP服务
MCP(Model Context Protocol)服务是机器人指挥官平台提供的一种标准化服务接口,允许外部智能体(AI Agent)通过MCP协议调用平台的RPA自动化能力。
通过MCP服务,智能体可以:
- 获取可用的任务模板列表
- 基于任务模板创建自动化任务
- 查询任务执行状态和结果
1.2 应用架构
┌─────────────────────────────────────────────────────────────────┐
│ 智能体平台 │
│ (AI Agent Platform) │
└─────────────────────────────────────────────────────────────────┘
│
│ MCP协议调用
│ HTTPS + Bearer Token
▼
┌─────────────────────────────────────────────────────────────────┐
│ Commander MCP服务端点 │
│ https://example.com/ │
│ /automation/mcp │
└─────────────────────────────────────────────────────────────────┘
2. 快速开始
2.1 基本使用流程
步骤1:获取Personal Access Token
├─ 登录机器人指挥官平台
├─ 点击右上角用户头像
├─ 选择"个人令牌"
└─ 点击"立即生成"生成令牌
步骤2:配置MCP客户端
├─ 设置服务端点URL
├─ 配置认证令牌
└─ 验证连接
步骤3:调用MCP工具
├─ 获取任务模板列表
├─ 创建新任务
└─ 查询任务结果
2.2 服务端点信息
| 配置项 | 值 |
|---|---|
| 协议 | HTTPS |
| 端点路径 | /automation/mcp |
| 认证方式 | Bearer Token |
| 令牌格式 | rk-{CompanyOpenId}-{randomString} |
3. 个人令牌管理
3.1 什么是Personal Access Token
Personal Access Token(个人访问令牌)是用于代替用户身份进行API调用的安全凭证。通过此令牌,外部应用可以代表用户调用平台的MCP服务。
3.2 访问令牌管理页面
- 登录机器人指挥官平台
- 点击顶部导航栏右侧的用户姓名/头像
- 在下拉菜单中选择“个人令牌”
3.3 生成个人令牌
3.3.1 操作步骤
- 进入个人令牌管理页面
- 如果是首次使用,点击立即生成按钮
- 系统自动生成令牌,默认命名为"default"
- 复制并妥善保存令牌
3.3.2 令牌格式说明
生成的令牌格式为:
rk-{CompanyOpenId}-{32位随机字符}
示例:
rk-abc123def456-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p
重要提示:令牌生成后请立即复制并妥善保存,关闭页面后无法再次查看完整令牌。
3.4 重置个人令牌
如需更新令牌(例如令牌泄露),可以执行重置操作:
- 在令牌列表中找到要重置的令牌
- 点击重置按钮
- 确认重置操作
注意:重置令牌后,原令牌将立即失效,所有使用原令牌的外部服务将无法通过认证。请及时更新所有使用该令牌的服务配置。
3.5 删除个人令牌
- 在令牌列表中找到要删除的令牌
- 点击删除按钮
- 确认删除操作
注意:删除令牌后,所有使用该令牌的外部服务将失去对平台服务的访问权限。
3.6 查看令牌使用情况
令牌列表中显示以下信息:
| 字段 | 说明 |
|---|---|
| Token Name | 令牌名称 |
| Personal Access Token | 令牌值(部分隐藏,可复制) |
| Created Time | 令牌创建时间 |
| Last Used Time | 令牌上次使用时间(最近一次成功换取系统访问凭证的时间) |
4. MCP工具使用
4.1 工具列表概览
MCP服务提供以下工具:
| 工具名称 | 功能描述 |
|---|---|
| get_task_templates | 获取用户可访问的任务模板列表 |
| create_task | 基于任务模板创建新的执行任务 |
| query_task_result | 查询任务的执行状态和结果 |
4.2 get_task_templates 工具
4.2.1 功能说明
获取当前用户可访问的所有任务模板列表,支持关键字搜索和分页。
4.2.2 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| keyWord | string | 否 | 流程名称关键字,用于筛选使用指定流程的模板。仅支持单个字符或单词作为搜索关键字,不支持使用空格、逗号等符号组合多个关键字进行查询 |
| pageIndex | integer | 否 | 页码,从1开始,默认为1 |
| pageSize | integer | 否 | 每页数量,默认为20,最大50 |
4.2.3 响应格式说明
MCP工具的返回结果被包装在一个JSON字符串中,实际响应格式为:
{
"result": "{\"return\": {...}, \"meta\": {...}}"
}
客户端需要先解析result字段,获取其中的JSON字符串后再次解析,才能得到完整的业务数据。
4.2.4 响应示例
解析后的业务数据示例:
{
"return": {
"data": {
"items": [
{
"name": "财务报表自动生成",
"description": "自动生成月度、季度和年度财务报表",
"template_detail": {
"flowName": "finance_report_flow",
"assignType": "automatic",
"workerGroupName": "财务机器人组",
"priority": "high",
"parameters": [
{
"parameterName": "report_type",
"parameterType": "string",
"parameterRemark": "报表类型:monthly/quarterly/annual"
}
]
}
}
],
"pageIndex": 1,
"pageSize": 20,
"totalCount": 1
},
"code": "0",
"message": ""
},
"meta": {
"data_integrity": {
"is_truncated": false
}
}
}
4.3 create_task 工具
4.3.1 功能说明
基于指定的流程创建新的自动化任务,支持参数配置和任务调度设置。任务创建后立即返回任务ID,任务异步执行。
4.3.2 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| flowName | string | 是 | 要执行的RPA流程名称 |
| assignType | string | 是 | 分配策略:automatic(自动分配)/ designate(指定分配) |
| workerName | string | 否 | 指定分配时的机器人名称,自动分配时传null或"0" |
| workerGroupName | string | 否 | 自动分配时的机器人组名称,指定分配时传null或"0" |
| count | integer | 否 | 创建任务数量,默认1,范围1-100 |
| departmentName | string | 否 | 部门名称,用户属于多个部门时必填 |
| priority | string | 否 | 任务优先级:high/middle/low,默认middle |
| isRecord | boolean | 否 | 是否录屏,默认根据组织配置 |
| hasMaxRunningTime | boolean | 否 | 是否启用最大运行时长限制,默认false |
| maxRunningTime | integer | 否 | 最大运行时长(分钟),启用限制时建议填写 |
| validityDays | integer | 否 | 任务有效期(天),默认30 |
| parameters | array | 否 | 流程输入参数数组 |
4.3.3 响应格式说明
MCP工具的返回结果被包装在一个JSON字符串中,实际响应格式为:
{
"result": "{\"return\": {...}, \"meta\": {...}}"
}
客户端需要先解析result字段,获取其中的JSON字符串后再次解析,才能得到完整的业务数据。
4.3.4 响应示例
{
"return": {
"data": {
"taskIds": [4702818380283905, 4702818380283906]
},
"code": "0",
"message": "Tasks created successfully"
},
"meta": {
"data_integrity": {
"is_truncated": false
}
}
}
4.4 query_task_result 工具
4.4.1 功能说明
根据任务ID查询已创建任务的执行状态、结果和详细信息。
4.4.2 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | integer | 是 | 要查询的任务ID |
4.4.3 响应格式说明
MCP工具的返回结果被包装在一个JSON字符串中,实际响应格式为:
{
"result": "{\"return\": {...}, \"meta\": {...}}"
}
客户端需要先解析result字段,获取其中的JSON字符串后再次解析,才能得到完整的业务数据。
4.4.4 响应示例
解析后的业务数据示例:
{
"return": {
"data": {
"taskId": 4702818380283905,
"departmentName": "Laiye Tech",
"flowName": "财务报表自动生成",
"state": "completed",
"subStateMessage": "任务执行完成",
"createTime": "2025-11-19T07:50:19Z",
"startTime": "2025-11-19T07:51:00Z",
"stopTime": "2025-11-19T08:05:30Z",
"runningTime": 870
},
"code": "0",
"message": ""
},
"meta": {
"data_integrity": {
"is_truncated": false
}
}
}
4.5 任务执行状态说明
| 状态码 | 状态名称 | 说明 |
|---|---|---|
| pending | 等待执行 | 任务已创建,等待机器人执行 |
| running | 正在执行 | 任务正在机器人上执行 |
| completed | 执行完成 | 任务成功执行完成 |
| failed | 执行失败 | 任务执行过程中出现错误 |
| cancelled | 已取消 | 任务被用户主动取消 |
| stopped | 已停止 | 任务被系统停止 |
| expired | 已过期 | 任务超过有效期未执行 |
任务子状态(subState):
任务结果中还包含subState字段,用于更详细地描述任务的执行状态:
success:任务执行成功- 其他子状态码根据具体业务场景定义
响应中还会包含subStateMessage字段,提供状态的详细描述信息。
4.6 数据解析说明
重要:MCP工具的所有响应都需要进行二次JSON解析:
- 第一次解析:从MCP工具响应中获取
result字段的字符串值 - 第二次解析:将
result字段的字符串值解析为JSON对象,获取return和meta字段 - 第三次解析(如需要):
return.data字段也是JSON字符串格式,需要再次解析
5. 集成指南
5.1 MCP客户端配置
5.1.1 基本配置
# MCP客户端配置示例
mcp_client:
server_url: "https://example.rpa.com:8182/automation/mcp"
authentication:
type: "Bearer"
token: "rk-{CompanyOpenId}-{randomString}"
timeout: 30000
retry:
max_attempts: 3
backoff: 1000
5.1.2 认证请求头
Authorization: Bearer rk-{CompanyOpenId}-{randomString}
Content-Type: application/json
5.2 典型集成场景
场景1:智能客服自动创建RPA任务
- 用户向智能客服提交财务报表生成请求
- 智能客服调用
get_task_templates获取可用模板 - 智能客服选择"财务报表自动生成"模板
- 调用
create_task创建任务,传入报表类型和时间范围参数 - 返回任务ID给用户
- 用户使用任务ID通过
query_task_result查询执行状态
场景2:定时调度系统集成
- 调度系统触发定时任务
- 调用
get_task_templates获取相关模板 - 调用
create_task批量创建任务 - 记录返回的任务ID列表
- 后台定期调用
query_task_result检查任务状态
5.3 错误处理
5.3.1 认证错误
{
"return": {
"code": "401",
"message": "Invalid or expired access token"
}
}
处理建议:
- 验证令牌格式是否正确
- 检查令牌是否已刷新或删除
- 联系用户重新生成令牌
5.3.2 权限错误
{
"return": {
"code": "403",
"message": "Access denied: insufficient permissions"
}
}
处理建议:
- 验证用户是否有所请求资源的使用权限
- 检查令牌对应的用户权限范围
5.3.3 参数错误
{
"return": {
"code": "400",
"message": "Invalid parameter: flowName not found"
}
}
处理建议:
- 检查参数值是否符合要求
- 先调用
get_task_templates获取有效的流程名称
5.4 智能体提示词编写指南
当将机器人指挥官的MCP服务集成到智能体(AI Agent)中时,合理的提示词(Prompt)设计对于引导智能体正确调用工具至关重要。
5.4.1 提示词编写原则
| 原则 | 说明 |
|---|---|
| 明确自动化场景 | 清晰告知智能体哪些业务场景可以使用RPA自动化 |
| 建立业务关联 | 将业务术语与MCP工具建立明确的映射关系 |
| 引导工具调用 | 明确告诉智能体何时调用哪个工具 |
| 说明参数要求 | 告知智能体调用工具时需要哪些参数信息 |
| 设置响应预期 | 告知智能体如何向用户反馈任务执行结果 |
5.4.2 基础提示词模板
以下是一个通用的提示词模板,可以根据实际业务场景进行调整:
你是一个智能助手,可以为用户调用RPA自动化服务来处理重复性、规则性的业务任务。
【可用的自动化能力】
你可以通过调用以下MCP工具为用户提供自动化服务:
1. get_task_templates - 查询可用的任务模板列表
- 当用户询问"可以自动完成什么任务"或"有哪些自动化能力"时调用
- 可以使用关键字搜索特定类型的任务模板
2. create_task - 创建并执行自动化任务
- 当用户明确要求执行某个自动化任务时调用
- 需要先通过get_task_templates确认任务模板存在
3. query_task_result - 查询任务执行状态和结果
- 当用户询问任务执行进度或结果时调用
【触发条件】
当用户的需求包含以下特征时,考虑调用MCP工具:
- 提到"自动"、"自动化"、"机器人"等关键词
- 描述的是重复性、规则性的操作(如数据录入、报表生成、文件处理等)
- 需要在多个系统之间进行数据同步或传输
- 需要定时执行的任务
【工作流程】
1. 理解用户需求,判断是否属于可自动化的场景
2. 调用get_task_templates查询相关的任务模板
3. 向用户说明可用的自动化选项
4. 获取用户确认和必要的参数
5. 调用create_task创建任务
6. 告知用户任务ID,并说明可以使用query_task_result查询进度
【注意事项】
- 在不确定用户需求时,先询问清楚再调用工具
- 对于需要用户提供参数的任务(如时间范围、文件路径等),务必先获取这些信息
- 任务执行是异步的,需要告知用户任务不会立即完成
- 如果找不到匹配的任务模板,诚实地告知用户当前不支持该自动化场景
5.4.3 场景化提示词示例
场景1:财务报销自动化
你是一个财务助手,可以帮助用户处理与财务报销相关的自动化任务。
用户可能会用以下方式表达需求:
- "帮我自动完成报销申请"
- "发票信息能自动填到报销系统吗"
- "每个月的报表能不能自动生成"
当用户提到"报销"、"发票"、"报表"等财务相关词汇,且带有"自动"的意思时:
1. 首先调用get_task_templates,使用关键字如"报销"、"发票"、"报表"进行搜索
2. 将找到的模板及其描述展示给用户
3. 如果用户需要执行某项任务,获取必要的参数(如发票文件、时间范围等)
4. 调用create_task创建任务
5. 返回任务ID给用户,说明任务正在后台执行
场景2:数据录入与同步
你是一个数据管理助手,可以帮助用户处理数据录入和数据同步的自动化任务。
当用户的需求涉及:
- 从Excel/CSV文件批量录入数据到系统(如CRM、ERP)
- 在多个系统之间同步数据
- 定期拉取某个系统的数据并生成报告
工作流程:
1. 理解用户的数据源和目标系统
2. 调用get_task_templates搜索相关模板(关键字:"数据"、"同步"、"导入"等)
3. 确认用户的执行意图,获取必要的文件路径、时间范围等参数
4. 创建自动化任务并反馈任务ID
场景3:邮件与文档处理
你是一个办公助手,可以帮助用户处理邮件和文档相关的自动化任务。
支持的自动化场景包括:
- 自动识别邮件中的发票、合同等文档
- 自动分类和归档邮件
- 批量处理文档(如格式转换、信息提取)
- 自动生成并发送标准邮件
当用户提到"邮件"、"文档"、"自动处理"、"识别"等词汇时:
1. 调用get_task_templates查看相关能力
2. 向用户说明可用的自动化选项
3. 获取必要的参数(如邮箱账号、文件位置、规则条件等)
4. 创建任务并跟踪执行状态
5.4.4 高级提示词技巧
| 技巧 | 说明 | 示例 |
|---|---|---|
| Few-Shot示例 | 给智能体提供具体的对话示例 | 用户:"能不能自动处理发票?" → 智能体调用get_task_templates搜索"发票" |
| 思维链提示 | 引导智能体逐步思考 | "当用户提出需求时,先判断:1.是否是自动化场景 2.查询可用模板 3.确认参数后创建任务" |
| 否定示例 | 明确告诉智能体什么情况不该调用 | "如果用户的需求是一次性操作或需要创造性判断,不要调用自动化工具" |
| 角色设定 | 给智能体设定明确的业务角色 | "你是RPA自动化专家,熟悉企业的各种自动化流程" |
5.4.5 提示词调试建议
在部署智能体之前,建议进行以下测试:
| 测试类型 | 测试内容 | 预期行为 |
|---|---|---|
| 正面测试 | 使用明确的自动化需求话术 | 智能体应主动查询并创建任务 |
| 负面测试 | 使用不相关的话术 | 智能体不应调用MCP工具 |
| 边界测试 | 使用模糊的话术 | 智能体应主动询问澄清 |
| 参数测试 | 测试缺少必要参数的情况 | 智能体应主动询问缺失的参数 |
6. 最佳实践
6.1 令牌安全管理
| 建议 | 说明 |
|---|---|
| 定期刷新令牌 | 建议每90天刷新一次个人令牌 |
| 安全存储 | 将令牌存储在安全的密钥管理系统中 |
| 最小权限原则 | 仅为集成账户分配必要的权限 |
| 监控使用情况 | 定期检查令牌的上次使用时间,发现异常及时处理 |
6.2 任务创建建议
| 建议 | 说明 |
|---|---|
| 参数验证 | 创建任务前先调用 get_task_templates 验证参数有效性 |
| 异步处理 | 任务创建后立即返回,使用后台任务轮询执行结果 |
| 错误重试 | 实现指数退避的重试机制处理网络故障 |
| 批量操作 | 使用count参数批量创建相同配置的任务 |
6.3 状态查询优化
| 建议 | 说明 |
|---|---|
| 合理轮询 | 任务执行初期使用较短轮询间隔(如30秒),稳定后延长至2-5分钟 |
| 避免过度查询 | 对于已完成/失败的任务无需继续查询 |
| 结果缓存 | 缓存已查询的任务结果,避免重复查询 |
6.4 数据完整性处理
MCP服务对返回数据有8KB的大小限制。超过限制的数据将被截断。
{
"meta": {
"data_integrity": {
"is_truncated": true,
"truncation_reason": "size_limit_exceeded",
"original_size": 12288,
"size_limit": "8192"
}
}
}
处理建议:
- 检查响应中的
data_integrity.is_truncated字段 - 如数据被截断,可通过平台界面获取完整数据
7. 常见问题
7.1 令牌相关
Q1:个人令牌有有效期吗?
A:个人令牌本身没有过期时间,但建议每90天刷新一次以确保安全。
Q2:忘记保存令牌怎么办?
A:如果令牌已生成但未保存,请刷新令牌生成新的令牌。旧令牌将无法找回。
Q3:一个用户可以创建多少个个人令牌?
A:当前版本每个用户限制为1个个人令牌。
Q4:令牌泄露后如何处理?
A:请立即刷新令牌,使旧令牌失效,并更新所有使用该令牌的服务配置。
7.2 工具调用相关
Q5:为什么调用create_task后任务没有立即执行?
A:任务创建后需要等待机器人空闲才能开始执行。这是正常现象,请通过 query_task_result 查询任务状态。
Q6:如何判断任务执行完成?
A:调用 query_task_result 查询任务状态,当 state 为 completed、failed、cancelled、stopped 或 expired 时表示任务已结束。
Q7:任务执行失败后如何查看错误原因?
A:调用 query_task_result 时,响应中的 subStateMessage 字段包含详细的错误信息。
Q8:可以批量创建任务吗?
A:可以。调用 create_task 时设置 count 参数(范围1-100)即可批量创建相同配置的任务。
7.3 技术集成相关
Q9:MCP服务支持哪些MCP协议版本?
A:MCP服务使用Streamable HTTP协议,兼容MCP协议的最新版本。
Q10:MCP服务有调用频率限制吗?
A:当前版本没有明确的调用频率限制,但建议合理控制调用频率,避免对系统造成压力。
Q11:如何处理网络超时?
A:建议设置30秒的超时时间,并实现指数退避的重试机制。
Q12:返回数据被截断怎么办?
A:检查响应中的 meta.data_integrity 字段。如数据被截断,可通过机器人指挥官平台界面获取完整数据。
8. 故障排查
8.1 连接问题排查
问题1:无法连接到MCP服务
| 现象 | 连接超时或拒绝连接 |
|---|---|
| 可能原因 | 1. 服务端点URL配置错误 2. 网络连接问题 3. 防火墙阻止 |
| 排查步骤 | 1. 验证服务端点URL格式正确 2. 检查网络连接 3. 确认防火墙规则允许HTTPS访问 |
| 解决方案 | 修正配置、检查网络、调整防火墙规则 |
问题2:认证失败
| 现象 | 返回401 Unauthorized |
|---|---|
| 可能原因 | 1. 令牌格式错误 2. 令牌已刷新或删除 3. 令牌被撤销 |
| 排查步骤 | 1. 验证令牌格式为 rk-{CompanyOpenId}-{randomString} 2. 检查令牌状态 |
| 解决方案 | 使用有效的令牌 |
8.2 工具调用问题排查
问题3:get_task_templates返回空列表
| 现象 | 没有返回任何任务模板 |
|---|---|
| 可能原因 | 1. 用户没有任何任务模板的使用权限 2. 搜索关键字没有匹配结果 |
| 排查步骤 | 1. 不使用keyWord参数重试 2. 确认用户权限 |
| 解决方案 | 联系任务模板所有者分配使用权限 |
问题4:create_task参数错误
| 现象 | 返回400 Bad Request |
|---|---|
| 可能原因 | 1. flowName对应的流程不存在 2. 权限不足 3. 参数值不符合要求 |
| 排查步骤 | 1. 先调用get_task_templates验证流程名称 2. 检查用户权限 3. 验证参数值 |
| 解决方案 | 使用有效的参数值重新调用 |
问题5:query_task_result任务不存在
| 现象 | 返回404 Not Found |
|---|---|
| 可能原因 | 1. taskId不正确 2. 任务已被删除 3. 用户无权访问该任务 |
| 排查步骤 | 1. 验证taskId格式 2. 确认任务创建成功 3. 检查用户权限 |
| 解决方案 | 使用正确的taskId查询 |
附录
附录A:术语表
| 术语 | 英文 | 说明 |
|---|---|---|
| MCP | Model Context Protocol | 模型上下文协议,一种AI智能体与服务交互的标准化协议 |
| Personal Access Token | - | 个人访问令牌,用于API调用的安全凭证 |
| Task Template | - | 任务模板,预定义的任务配置 |
| Flow | - | 流程,RPA自动化流程的定义 |
| Worker Robot | - | 流程机器人,执行RPA流程的机器人或机器人组 |
| Asynchronous Execution | - | 异步执行,任务在后台执行,调用立即返回 |
附录B:HTTP状态码说明
| 状态码 | 说明 |
|---|---|
| 200 | 请求成功 |
| 400 | 请求参数错误 |
| 401 | 认证失败,令牌无效或已过期 |
| 403 | 权限不足,无权访问请求的资源 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |