文章大师MCP方案

陀螺匠 MCP 技术方案

通过MCP协议连接AI与企业业务系统,实现多向协作,让AI成为真正懂业务、能交付结果的"内部管理专家"


一、整体架构设计

1.1 架构分层

复制代码
┌─────────────────────────────────────────────────────────┐
│                      客户端层                            │
│          网页 / 飞书 / APP / 企业微信                     │
└─────────────────────┬───────────────────────────────────┘
                      │ HTTP 请求
┌─────────────────────▼───────────────────────────────────┐
│                    业务后端层                             │
│   - 接收用户消息                                          │
│   - 从登录态获取 admin_id、website_id                     │
│   - 组装可用 Skill 列表(工具描述)                        │
│   - 转发给 Claude API                                    │
│   - 接收 AI 工具调用指令,执行对应 Skill                   │
└──────────┬──────────────────────────┬────────────────────┘
           │ Claude API               │ 执行 Skill
┌──────────▼──────────┐   ┌──────────▼────────────────────┐
│     Claude AI        │   │          Skill 层              │
│  - 理解用户意图       │   │  - getArticleList  文章列表    │
│  - 决策调用哪个Skill  │◄──┤  - getLeadRanking  留电排行    │
│  - 多步骤自主编排     │   │  - sendFeishu      飞书通知    │
│  - 整理数据格式输出   │   │  - publishArticle  发布文章    │
└─────────────────────┘   │  - hospital-list   医院列表    │
                          │  - generate-article 生成文章   │
                          │  - 其他业务Skill...            │
                          └──────────┬─────────────────────┘
                                     │ HTTP 接口调用
                          ┌──────────▼─────────────────────┐
                          │        业务接口层                │
                          │  - /api/article/list            │
                          │  - /api/lead/ranking            │
                          │  - 飞书 Webhook                 │
                          │  - 其他业务接口...               │
                          └────────────────────────────────┘

1.2 核心概念

概念 说明
MCP Model Context Protocol,AI与工具之间的标准通信协议
Skill 对业务接口的封装,等同于MCP Tool,是AI可调用的最小执行单元
Claude API AI决策引擎,负责理解意图、编排步骤、整理结果
admin_id 操作者身份标识,用于权限校验和租户隔离
website_id 站点标识,用于多站点数据隔离

二、双向协作机制

2.1 AI → 业务系统(AI主动获取数据)

复制代码
用户发起自然语言需求
    ↓
AI分析意图,自主决策调用哪些Skill
    ↓
Skill调用对应业务接口
    ↓
数据返回给AI处理、整理、输出

适用场景:查询报表、生成排行、发布内容、多步骤自动化任务

2.2 业务系统 → AI(业务主动发起调用)

复制代码
业务事件触发(定时任务 / 用户操作 / 审批节点)
    ↓
业务后端主动调用 Claude API
    ↓
AI执行指定Skill流程
    ↓
结果写回业务系统 或 推送飞书通知

适用场景:定时生成报表、批量内容生成、自动审批分析、事件驱动通知


三、Skill 设计规范

复制代码
Skill = 描述(告诉AI何时用、用什么参数)+ 执行(调哪个接口、怎么处理返回)

Skill 标准结构

复制代码
Skill文件
  ├── 触发描述   用自然语言描述该Skill的功能和触发时机
  ├── 入参定义   需要哪些参数(从上下文获取 or AI从对话中提取)
  ├── 接口调用   实际HTTP请求逻辑
  └── 返回处理   结果格式化后返回给AI继续处理

现有 Skill 清单

Skill名称 功能说明 对应接口
web-list 获取站点列表 webList
hospital-list 获取医院列表 getHospital
doctor-list 获取医生列表 getDoctor
project-list 获取项目列表 getProject
section-list 获取栏目列表 getList
work-flow-list 获取工作流列表 workFlowList
generate-article 生成文章内容 内部AI生成
generate-flow-task 工作流生成发文任务 generateFlowTask
publish-article 发布文章到站点 publishArticle
title-prompt-list 获取标题提示词列表 titlePromptList

四、完整执行流程详解

场景:客户说"看看上个月发布的文章的留电排行"


Step 1:用户发起请求

复制代码
客户在网页/飞书输入:
"看看上个月发布的文章的留电排行"

Step 2:前端发送到后端

复制代码
前端
  ↓
POST /api/chat
{
  "message": "看看上个月发布的文章的留电排行",
  "session_id": "abc123"
}

Step 3:后端组装上下文,发给 Claude API

后端从当前登录态取出用户信息,组装完整请求:

json 复制代码
{
  "model": "claude-sonnet-4-6",
  "system": "你是企业内部管理专家。当前操作者 admin_id=1023,website_id=5",
  "messages": [
    {
      "role": "user",
      "content": "看看上个月发布的文章的留电排行"
    }
  ],
  "tools": [
    {
      "name": "getArticleList",
      "description": "获取指定时间段内发布的文章列表,支持按站点、栏目、时间筛选,返回文章ID、标题、发布时间",
      "input_schema": {
        "website_id": "string",
        "start_date": "string",
        "end_date": "string"
      }
    },
    {
      "name": "getLeadRanking",
      "description": "根据文章ID列表,获取每篇文章的留电数量,按留电数从高到低返回排行",
      "input_schema": {
        "website_id": "string",
        "article_ids": "array",
        "start_date": "string",
        "end_date": "string"
      }
    },
    {
      "name": "sendFeishu",
      "description": "将内容发送到飞书群或指定成员",
      "input_schema": {
        "content": "string",
        "target": "string"
      }
    }
  ]
}

关键说明:

  • admin_idwebsite_id 后端自动从登录态注入,用户无需填写
  • tools 列表告诉 Claude 当前有哪些能力可以调用
  • Claude 本身没有记忆,每次必须携带完整上下文

Step 4:Claude 分析意图,规划执行链

Claude 收到请求后,自主分析推理:

复制代码
意图拆解:
  "上个月" → 计算日期范围:2026-05-01 ~ 2026-05-31
  "发布的文章" → 需要先查文章列表,得到文章ID
  "留电排行" → 拿到文章ID后,再查每篇文章的留电数据

执行规划:
  第一步:调 getArticleList,获取上月发布的所有文章ID
  第二步:调 getLeadRanking,查这些文章的留电排行
  (用户没说发飞书,所以不调 sendFeishu,直接回复用户)

Claude 返回第一个工具调用指令:

json 复制代码
{
  "type": "tool_use",
  "id": "tool_001",
  "name": "getArticleList",
  "input": {
    "website_id": "5",
    "start_date": "2026-05-01",
    "end_date": "2026-05-31"
  }
}

Step 5:后端执行 getArticleList Skill

复制代码
后端收到工具调用指令
  ↓
执行 getArticleList Skill
  ↓
Skill 内部发起 HTTP 请求:
  GET /api/article/list
      ?website_id=5
      &start_date=2026-05-01
      &end_date=2026-05-31
  ↓
业务接口返回数据:
  {
    "total": 42,
    "list": [
      { "id": 1011, "title": "北京协和医院隆鼻项目介绍",    "publish_time": "2026-05-03" },
      { "id": 1025, "title": "双眼皮手术恢复期注意事项",    "publish_time": "2026-05-07" },
      { "id": 1033, "title": "玻尿酸填充和自体脂肪的区别",  "publish_time": "2026-05-12" },
      { "id": 1047, "title": "热玛吉适合什么年龄段",        "publish_time": "2026-05-18" },
      { "id": 1056, "title": "吸脂手术前后对比案例分享",    "publish_time": "2026-05-22" }
      // ... 共42篇
    ]
  }
  ↓
Skill 将数据返回给后端
  ↓
后端将结果作为 tool_result 发回给 Claude

Step 6:Claude 收到文章列表,决策第二步

复制代码
Claude 收到42篇文章数据
  ↓
提取所有文章ID:[1011, 1025, 1033, 1047, 1056, ...]
  ↓
决策:调用 getLeadRanking 查留电数据

Claude 返回第二个工具调用指令:

json 复制代码
{
  "type": "tool_use",
  "id": "tool_002",
  "name": "getLeadRanking",
  "input": {
    "website_id": "5",
    "article_ids": [1011, 1025, 1033, 1047, 1056, "...共42个"],
    "start_date": "2026-05-01",
    "end_date": "2026-05-31"
  }
}

Step 7:后端执行 getLeadRanking Skill

复制代码
后端收到工具调用指令
  ↓
执行 getLeadRanking Skill
  ↓
Skill 内部发起 HTTP 请求:
  POST /api/lead/ranking
  {
    "website_id": "5",
    "article_ids": [1011, 1025, 1033, ...],
    "start_date": "2026-05-01",
    "end_date": "2026-05-31"
  }
  ↓
业务接口返回数据(按留电数排序):
  [
    { "article_id": 1033, "title": "玻尿酸填充和自体脂肪的区别",  "leads": 89, "views": 3420 },
    { "article_id": 1011, "title": "北京协和医院隆鼻项目介绍",    "leads": 76, "views": 2890 },
    { "article_id": 1056, "title": "吸脂手术前后对比案例分享",    "leads": 54, "views": 1960 },
    { "article_id": 1047, "title": "热玛吉适合什么年龄段",        "leads": 41, "views": 2100 },
    { "article_id": 1025, "title": "双眼皮手术恢复期注意事项",    "leads": 38, "views": 1750 },
    // ... 共42篇
  ]
  ↓
Skill 将数据返回给后端
  ↓
后端将结果作为 tool_result 发回给 Claude

Step 8:Claude 整理数据,生成最终回复

复制代码
Claude 收到留电排行数据
  ↓
自动整理:
  - 格式化成排行榜
  - 计算总留电数、均值
  - 标注高转化率文章
  - 提炼关键洞察
  ↓
生成回复内容,直接返回给用户

Claude 最终回复:

复制代码
📊 上个月(2026年5月)文章留电排行

共发布 42 篇文章,累计留电 687 条

排名  文章标题                       留电数   浏览量   转化率
────────────────────────────────────────────────────────
🥇 1  玻尿酸填充和自体脂肪的区别      89条    3420次   2.6%
🥈 2  北京协和医院隆鼻项目介绍        76条    2890次   2.6%
🥉 3  吸脂手术前后对比案例分享        54条    1960次   2.8% ⬆️
   4  热玛吉适合什么年龄段            41条    2100次   2.0%
   5  双眼皮手术恢复期注意事项        38条    1750次   2.2%
  ...

💡 洞察:
- 案例类文章(吸脂对比)转化率最高,达 2.8%
- 玻尿酸和隆鼻类内容流量和留电双高,建议持续生产
- 共 18 篇文章零留电,建议检查落地页咨询入口是否正常

Step 9:结果返回用户界面

复制代码
Claude 回复内容
  ↓
后端返回给前端
  ↓
用户在网页/飞书看到完整排行报告

五、完整时序图

复制代码
用户      前端       后端          Claude      业务接口
 │         │          │               │            │
 │─发消息─►│          │               │            │
 │         │─POST────►│               │            │
 │         │          │─组装上下文────►│            │
 │         │          │ admin_id      │            │
 │         │          │ website_id    │            │
 │         │          │ Skill列表     │            │
 │         │          │              │            │
 │         │          │◄─工具调用指令──│            │
 │         │          │ getArticleList│            │
 │         │          │──────────────────────────►│
 │         │          │◄──────────────────────────│
 │         │          │  42篇文章列表              │
 │         │          │─tool_result──►│            │
 │         │          │              │            │
 │         │          │◄─工具调用指令──│            │
 │         │          │ getLeadRanking│            │
 │         │          │──────────────────────────►│
 │         │          │◄──────────────────────────│
 │         │          │  留电排行数据              │
 │         │          │─tool_result──►│            │
 │         │          │              │            │
 │         │          │◄─整理后的排行榜回复─────────│
 │         │◄─响应────│               │            │
 │◄─显示───│          │               │            │

六、AI决策 vs 后端执行 --- 职责边界

职责 由谁完成
理解"上个月"是哪个日期范围 Claude
决定先查文章、再查留电的执行顺序 Claude
判断用户没说发飞书所以不发 Claude
整理数据格式、计算转化率、提炼洞察 Claude
实际发起 HTTP 请求调业务接口 Skill(后端执行)
校验 admin_id 权限 业务接口
保证A公司看不到B公司数据 业务接口 + admin_id 隔离

七、权限与多租户设计

复制代码
每次请求后端自动注入:
  admin_id  → 确定操作者身份和数据权限范围
  website_id → 确定操作的站点范围

业务接口根据这两个参数:
  - 只返回该租户下的数据
  - 校验该用户是否有操作权限
  - A公司数据绝对不会出现在B公司的AI响应中

用户无感知,无需手动填写任何权限参数

八、为什么不直接用接口,而要用MCP

维度 传统接口调用 MCP + Skill
调用时机 开发者写死,固定触发 AI根据理解自主决定
执行顺序 固定流程,不可变 AI动态编排,按需组合
参数来源 代码里定义好 AI从自然语言中提取
新增需求 改代码、改流程 加一个Skill描述即可
用户操作 点按钮、填表单 直接说需求
多步骤任务 需要开发多个页面 AI自动串联多个Skill

核心差异:接口满足固定的、已知的业务流程;MCP满足自然语言驱动的、动态组合的业务流程。


九、部署方案

方案一:SaaS 模式(平台统一运营)

复制代码
统一部署后端 + Skill库 + Claude API
  ↓
客户通过网页/飞书入口使用
  ↓
按 admin_id 做租户隔离
  ↓
可按调用量、功能模块向客户收费

方案二:源码交付模式

复制代码
客户获得完整源码
  ↓
配置文件填入以下参数:
  CLAUDE_API_KEY=sk-ant-xxx       # AI服务
  DB_HOST=xxx                     # 业务数据库
  FEISHU_WEBHOOK=https://xxx      # 飞书通知
  ↓
一键部署,AI能力随系统启动

支持替换的AI服务:

AI服务 适用场景
Claude API(推荐) 效果最佳,推理能力强
OpenAI GPT 国际化客户
文心 / 通义 / 智谱 国内合规要求
Ollama / vLLM 私有化、数据不出内网

方案三:私有化部署(大客户/政企)

复制代码
全部部署在客户内网
  ↓
AI使用本地模型(Ollama等)
  ↓
数据不出内网,满足等保/合规要求
  ↓
业务系统、AI、Skill全部内网运行

十、核心价值总结

客户买的不是AI技术本身,是一套已经封装好业务逻辑的Skill库,加上能把这些Skill智能串联的AI对话入口。

  • AI 负责:理解需求、决策步骤、整理结果
  • Skill 负责:执行具体操作
  • 接口 负责:提供真实业务数据
  • 权限 负责:保障数据安全隔离

用户只需说一句话,系统自动完成过去需要多个页面、多次点击才能完成的操作。