MCP 与 Skills 完全指南

本文档将全面介绍 MCP(Model Context Protocol)和 Qwen Code Skills,包括它们的定义、区别、连接方式、使用方法以及实际示例。


目录

  1. 什么是 MCP
  2. MCP 与 HTTP 的区别
  3. HTTP 连接方式详解与工具对比
  4. MCP Server 的三种工具类型
  5. MCP 服务开发实战 Demo
  6. 什么是 Skills - 与 MCP 对比
  7. Skills 编写技巧与示例
  8. Skills 的两种执行模式

1. 什么是 MCP

1.1 定义

MCP(Model Context Protocol,模型上下文协议) 是一个开放协议,用于标准化应用程序向大语言模型(LLMs)提供上下文的方式。

你可以将 MCP 看作是 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种标准化方式来连接各种设备一样,MCP 提供了一种标准化方式来连接 AI 模型与外部数据源和工具。

1.2 核心作用

外部系统

MCP Server

MCP 协议层

AI 客户端

工具调用

转发请求/响应

数据读取

模板加载

执行操作

API 调用

文件访问

Qwen Code

标准化接口

Tools 工具

Resources 资源

Prompts 提示词

数据库

API 服务

文件系统

1.3 核心价值

价值点 说明
标准化集成 无需为每个外部工具编写复杂接口,统一使用 MCP 协议
工具发现 AI 客户端可以自动发现 MCP Server 提供的所有工具
安全隔离 敏感信息(如 API Key)保留在 Server 端,不暴露给 AI 模型
灵活扩展 可以轻松添加新的工具或数据源
跨平台 支持多种传输方式(STDIO、SSE、HTTP)

2. MCP 与 HTTP 的区别

2.1 本质区别

MCP (模型上下文协议)

AI 上下文交换协议

工具调用 + 资源访问

tools/call/resources/read

传输工具定义/结果

基于 JSON-RPC 2.0

可运行在 HTTP/STDIO 上

HTTP (超文本传输协议)

应用层通信协议

请求 - 响应模式

GET/POST/PUT/DELETE

传输 HTML/JSON/XML

底层传输协议

可运行在 TCP/TLS 上

2.2 详细对比表

维度 HTTP MCP
定位 通用应用层传输协议 AI 专用上下文交换协议
设计目标 传输网页、API 数据 连接 AI 模型与外部工具/数据
消息格式 请求行 + 请求头 + 请求体 JSON-RPC 2.0 格式
典型方法 GET, POST, PUT, DELETE tools/list, tools/call, resources/read
运行模式 请求 - 响应 支持流式响应、事件推送
依赖关系 独立协议 MCP 可以基于 HTTP 传输

2.3 关系说明

MCP 不是替代 HTTP,而是构建在 HTTP 之上的应用层协议

MCP STDIO 模式

MCP 协议层

STDIO
标准输入/输出
无需网络

MCP 栈

MCP 协议层
tools/resources

HTTP

TCP

IP

传统 HTTP API 栈

业务 API
REST/GraphQL

HTTP

TCP

IP


3. HTTP 连接方式详解与工具对比

3.1 MCP 的三种连接方式

根据 QWEN CLI、QoderCLI 等官方文档,MCP 支持以下连接方式:

MCP Client
Qwen Code

STDIO
本地进程
stdin/stdout
子进程通信

SSE
事件流
HTTP POST
EventStream

Streamable HTTP
远程调用
HTTP POST
JSON-RPC

本地 MCP Server
本地运行

远程 MCP Server
SSE 模式

远程 MCP Server
Streamable 模式

3.2 三种连接方式详解

方式一:STDIO(标准输入/输出)

STDIO 连接模式

stdin/stdout

MCP Client
Qwen Code

MCP Server
本地进程

配置示例 (settings.json)

配置示例 (settings.json):

{
  "mcpServers": {
    "local-server": {
      "command": "node",
      "args": ["/path/to/server.js"],
      "env": { "API_KEY": "xxx" }
    }
  }
}

特点

  • ✅ 无需网络,安全性高
  • ✅ 适合本地工具、CLI 集成
  • ✗ 仅支持本地运行
  • ✗ 需要本地环境配置
方式二:SSE(Server-Sent Events)

SSE 连接模式

HTTP POST

Event Stream

MCP Client
Qwen Code

MCP Server
远程托管

配置示例 (settings.json)

配置示例 (settings.json):

{
  "mcpServers": {
    "remote-server": {
      "url": "http://localhost:8080/mcp",
      "type": "sse"
    }
  }
}

特点

  • ✅ 支持远程托管
  • ✅ 配置简单(仅需 URL)
  • ✅ 适合初学者和快速原型
  • ✅ 服务端可主动推送事件
方式三:Streamable HTTP

Streamable HTTP 连接模式

双向流式通信

MCP Client
Qwen Code

MCP Server
远程托管

配置示例 (settings.json)

配置示例 (settings.json):

{
  "mcpServers": {
    "streamable-server": {
      "url": "http://localhost:8080/mcp",
      "type": "sse"
    }
  }
}

特点

  • ✅ 支持完整的双向流式通信
  • ✅ 配置与 SSE 相同,自动识别
  • ✅ 适合复杂的实时交互场景

3.3 主流工具对比

工具 STDIO SSE Streamable HTTP 配置方式
Qwen Code settings.json
QoderCLI 图形界面 + 配置文件
Claude Code claude.json
Cursor ⚠️ 部分支持 图形界面

3.4 QWEN CLI 配置示例

{
  "mcpServers": {
    "local-stdio": {
      "command": "node",
      "args": ["/path/to/mcp-server.js"],
      "env": {
        "API_KEY": "your-api-key"
      }
    },
    "remote-sse": {
      "url": "http://localhost:8080/mcp",
      "type": "sse"
    },
    "streamable": {
      "url": "http://localhost:8080/mcp",
      "type": "sse"
    }
  }
}

4. MCP Server 的三种工具类型

MCP Server 提供三种核心能力,通过不同的接口暴露给 AI 客户端:

MCP Server

Tools 工具
可执行操作
写入/修改

Resources 资源
数据读取
只读访问

Prompts 提示词
模板指令
引导对话

4.1 Tools(工具)

定义:Tools 是 MCP Server 暴露给 AI 的可执行函数,AI 可以调用这些工具来执行实际操作。

特点

  • ✅ 可以执行写操作(修改数据、发送请求等)
  • ✅ 有副作用(改变系统状态)
  • ✅ 需要参数定义和返回结果
  • ✅ AI 根据任务自动选择调用

典型用途

  • 数据库写入操作
  • API 请求发送
  • 文件修改
  • 命令执行

示例

@McpTool(name = "eco_query_balance", description = "查询 ECO 平台账户余额")
public Map<String, Object> ecoQueryBalance() {
    // 执行实际 API 调用
    EcoBalance balance = ecoService.queryUserMoney(partnerId, privateKey);
    return Response.ok(data, "余额查询成功").toMap();
}

4.2 Resources(资源)

定义:Resources 是 MCP Server 提供的只读数据源,AI 可以读取这些数据来获取上下文信息。

特点

  • ✅ 只读访问(无副作用)
  • ✅ 提供数据上下文
  • ✅ 支持 URI 标识
  • ✅ 可以订阅变化通知

典型用途

  • 读取配置文件
  • 访问数据库记录
  • 获取系统状态
  • 日志文件读取

示例 URI

  • file:///path/to/config.json
  • database://users/123
  • log://application/errors

4.3 Prompts(提示词)

定义:Prompts 是预定义的模板或指令,用于引导 AI 执行特定类型的任务。

特点

  • ✅ 提供结构化指令
  • ✅ 定义任务流程
  • ✅ 可包含变量占位符
  • ✅ 帮助 AI 理解复杂任务

典型用途

  • 代码审查流程
  • 数据分析模板
  • 报告生成指南
  • 最佳实践指导

示例

## Code Review Prompt

请按照以下步骤审查代码:
1. 检查代码风格是否符合规范
2. 识别潜在的安全漏洞
3. 评估性能影响
4. 提供改进建议

4.4 三种类型对比

特性 Tools Resources Prompts
操作类型 执行动作 读取数据 提供指导
副作用
方向 双向 只读 只读
参数 需要定义 URI 标识 可选变量
返回 执行结果 数据内容 模板文本

5. MCP 服务开发实战 Demo

本节以我的 mcp-spring-boot-demo 项目为例,演示如何编写一个 MCP 服务。

5.1 项目结构

mcp-spring-boot-demo/
├── pom.xml                          # Maven 配置
├── src/main/java/
│   └── com/example/mcp/
│       ├── McpServerApplication.java    # 启动类
│       ├── tool/                        # MCP 工具类
│       │   ├── McpTools.java            # 基础工具
│       │   ├── EcoMcpTools.java         # ECO 平台工具
│       │   ├── BuffMcpTools.java        # BUFF 平台工具
│       │   ├── C5McpTools.java          # C5 平台工具
│       │   └── SteamMcpTools.java       # Steam 工具
│       ├── eco/                         # ECO 平台模块
│       │   ├── model/                   # 数据模型
│       │   ├── service/                 # 服务层
│       │   └── ...
│       └── ...
└── src/main/resources/
    └── application.yml                # Spring Boot 配置

5.2 第一步:添加依赖

<!-- pom.xml -->
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring AI MCP Server WebMVC Starter (支持 SSE/Streamable) -->
    <dependency>
        <groupId>org.springaicommunity</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
        <version>1.1.4</version>
    </dependency>
</dependencies>

5.3 第二步:创建启动类

// McpServerApplication.java
@SpringBootApplication
public class McpServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(McpServerApplication.class, args);
    }
}

5.4 第三步:编写 MCP 工具类

简单示例:基础计算工具
// McpTools.java
@Component
public class McpTools {

    /**
     * 工具 1: 加法计算器
     */
    @McpTool(name = "add", description = "两个数相加")
    public int add(
            @McpToolParam(description = "第一个数", required = true) int a,
            @McpToolParam(description = "第二个数", required = true) int b) {
        return a + b;
    }

    /**
     * 工具 2: 天气查询(模拟)
     */
    @McpTool(name = "query_weather", description = "查询城市天气信息")
    public String queryWeather(
            @McpToolParam(description = "城市名称", required = true) String city) {
        return switch (city) {
            case "北京" -> "北京:晴,25°C,湿度 40%,空气质量良";
            case "上海" -> "上海:多云,22°C,湿度 65%,空气质量优";
            default -> city + ":暂无数据";
        };
    }
}
复杂示例:ECO 平台工具
// EcoMcpTools.java
@Component
public class EcoMcpTools {

    private final EcoService ecoService;

    public EcoMcpTools(EcoService ecoService) {
        this.ecoService = ecoService;
    }

    /**
     * ECO 工具:查询账户余额
     */
    @McpTool(name = "eco_query_balance", description = "查询 ECO 平台账户余额")
    public Map<String, Object> ecoQueryBalance() {
        try {
            // 1. 从配置文件读取敏感信息
            Properties config = loadEcoConfig();
            String partnerId = config.getProperty("eco.partnerId");
            String privateKey = config.getProperty("eco.privateKey");

            // 2. 调用服务层 API
            EcoBalance balance = ecoService.queryUserMoney(partnerId, privateKey);

            // 3. 返回结果
            Map<String, Object> data = new HashMap<>();
            data.put("money", balance.getMoney());
            data.put("currency", "CNY");
            return Response.ok(data, "余额查询成功").toMap();

        } catch (Exception e) {
            return Response.fail(null, "余额查询失败:" + e.getMessage()).toMap();
        }
    }

    /**
     * ECO 工具:查询卖家订单列表
     */
    @McpTool(name = "eco_query_seller_orders", description = "查询 ECO 平台卖家订单列表")
    public Map<String, Object> ecoQuerySellerOrders(
            @McpToolParam(description = "Steam ID", required = true) String steamId,
            @McpToolParam(description = "开始时间 (yyyy-MM-dd)", required = false) String startTime,
            @McpToolParam(description = "结束时间 (yyyy-MM-dd)", required = false) String endTime,
            @McpToolParam(description = "订单状态 (8=待确认)", required = false) Integer state,
            @McpToolParam(description = "页码", required = false) Integer pageIndex,
            @McpToolParam(description = "每页数量 (最大 100)", required = false) Integer pageSize) {

        // 1. 加载配置
        Properties config = loadEcoConfig();
        String partnerId = getPartnerId(config);
        String privateKey = getPrivateKey(config);

        // 2. 设置默认参数
        if (startTime == null) {
            startTime = LocalDate.now().minusDays(30).format(DateTimeFormatter.ISO_LOCAL_DATE);
        }
        if (endTime == null) {
            endTime = LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
        }
        int orderState = state != null ? state : 8;  // 8=待确认
        int pageNum = pageIndex != null ? pageIndex : 1;
        int pageSizeVal = pageSize != null ? Math.min(pageSize, 100) : 100;

        // 3. 调用服务
        List<EcoOrder> orders = ecoService.querySellerOrderList(
            partnerId, privateKey, steamId, startTime, endTime,
            orderState, pageNum, pageSizeVal
        );

        // 4. 返回结果
        Map<String, Object> data = new HashMap<>();
        data.put("count", orders.size());
        data.put("orders", orders);
        return Response.ok(data, "订单查询成功").toMap();
    }
}

5.5 第四步:配置 MCP Server

# application.yml
spring:
  ai:
    mcp:
      server:
        name: demo-mcp-server
        version: 1.0.0
        type: SYNC  # 同步模式

server:
  port: 8080  # MCP 服务端口

5.6 第五步:启动并测试

# 启动服务
mvn spring-boot:run

# 服务启动后,MCP 端点将在 http://localhost:8080/mcp

5.7 完整代码流程图

实际服务 (ECO API) MCP Server (Spring Boot) Qwen Code (Client) 实际服务 (ECO API) MCP Server (Spring Boot) Qwen Code (Client) 1. tools/list (获取工具列表) 2. 返回工具定义 [eco_query_...] 3. tools/call {name: "eco_...", args: {...}} 4. HTTP 请求 5. 返回数据 6. 返回结果 {money: 1000}

6. 什么是 Skills - 与 MCP 对比

6.1 Skills 定义

Skills(技能) 是 Qwen Code 中的模块化功能单元,通过包含指令(及可选脚本/资源)的结构化文件夹来增强模型能力。

简单来说:Skills 是给 AI 的"使用说明书" + “工具箱”

6.2 Skills 结构

.qwen/skills/<skill-name>/
├── SKILL.md              # 必需:技能定义文件(YAML + Markdown)
├── reference.md          # 可选:参考文档
├── examples.md           # 可选:使用示例
├── scripts/              # 可选:工具脚本
│   └── run.py
└── templates/            # 可选:模板文件
    └── report.html

6.3 SKILL.md 格式

---
name: data-analysis
description: 数据分析技能,用于执行 SQL 查询并生成可视化报表
---

# 数据分析技能

## 使用说明

当用户需要查询数据或生成报表时,请使用此技能。

## 执行流程

1. 根据用户需求编写 SQL 查询
2. 使用以下命令执行查询:
   ```bash
   python scripts/run_sql.py --sql "{sql}"
  1. 分析查询结果
  2. 生成可视化报表

数据表示例

字段 类型 说明
state string 州名
cases int 确诊数

### 6.4 MCP vs Skills 对比

```mermaid
flowchart TB
    subgraph MCP["MCP (协议层)"]
        A1[标准化 API 接口]
        A2[tools/resources/prompts]
        A3[运行时调用]
        A4[需要 Server 进程]
        A5["适合:API 集成、数据访问、实时操作"]
    end
    
    subgraph Skills["Skills (指令层)"]
        B1[模块化知识库]
        B2[SKILL.md + 脚本/模板]
        B3[启动时加载]
        B4[静态文件]
        B5["适合:工作流指导、最佳实践、领域知识"]
    end
    
    subgraph Client["Qwen Code<br/>AI 编程助手"]
        C[MCP + Skills 协同工作]
    end
    
    MCP --> C
    Skills --> C

6.5 详细对比表

维度 MCP Skills
本质 通信协议 指令模板
形式 运行中的服务进程 静态文件(SKILL.md)
加载时机 运行时连接 启动时加载
能力来源 工具函数执行 指令引导 AI 行为
配置位置 settings.json ~/.qwen/skills/.qwen/skills/
调用方式 自动发现工具 自动触发或 /skills <name>
适用场景 API 集成、数据访问 工作流指导、知识沉淀
是否需要代码 是(Server 实现) 否(Markdown 即可)
团队共享 部署 Server Git 共享技能目录

6.6 协同工作

MCP 和 Skills 可以协同工作

Qwen Code

MCP 层:ECO 工具

eco_query_seller_orders
获取订单

eco_query_goods_price
获取价格

Skills 层:数据分析技能

指导 AI 如何分析数据

提供报表生成模板

用户:查询 ECO 订单并生成报表

结果:生成报表


7. Skills 编写技巧与示例

7.1 编写技巧

技巧 1:明确触发条件
---
name: code-review
description: 代码审查技能,当用户请求审查代码、检查代码质量或寻找 bug 时自动触发
---

要点:在 description 中明确说明何时使用此技能。

技巧 2:提供清晰的执行流程
## 执行流程

1. **理解需求**:确认用户要审查的代码范围
2. **静态分析**:检查代码风格、命名规范
3. **安全检查**:识别 SQL 注入、XSS 等漏洞
4. **性能评估**:查找性能瓶颈
5. **生成报告**:按以下模板输出审查结果
技巧 3:提供示例和模板
## 审查报告模板

```markdown
# 代码审查报告

## 文件:{file_path}

### ✅ 优点
- ...

### ⚠️ 需要改进
- [高优先级] ...
- [中优先级] ...

### 📝 建议
- ...

#### 技巧 4:引用外部资源

```markdown
## 参考文档

- 项目规范:`./reference.md`
- 脚本工具:`scripts/analyze.py`
- 模板文件:`templates/report.html`
技巧 5:聚焦单一能力

不好

description: 数据分析、代码审查、文档生成、测试编写等多功能技能

description: 数据分析技能,专门用于执行 SQL 查询并生成可视化报表

7.2 完整示例

示例 1:数据分析技能
~/.qwen/skills/data-analysis/
├── SKILL.md
├── scripts/
│   └── run_sql.py
└── templates/
    └── chart.html
---
name: data-analysis
description: 数据分析技能,当用户需要查询数据、分析趋势或生成报表时自动触发
---

# 数据分析技能

## 能力说明

本技能提供以下能力:
- 执行 SQL 查询
- 分析数据趋势
- 生成可视化报表

## 执行流程

### 1. 编写 SQL

根据用户需求编写 SQL 查询语句。

### 2. 执行查询

使用以下命令执行 SQL:
```bash
E:\anaconda\conda\envs\openai\python.exe -u scripts/run_sql.py --sql "{sql}"

3. 分析结果

分析查询结果,识别:

  • 数据趋势
  • 异常值
  • 关键指标

4. 生成报表

使用 templates/chart.html 模板生成可视化报表。

数据表结构

us_covid19_counties

字段 类型 说明
state string 州名
county string 县名
cases int 确诊数
deaths int 死亡数

示例查询

查询确诊人数 Top10 的县

SELECT county, state, SUM(cases) as total_cases
FROM us_covid19_counties
GROUP BY county, state
ORDER BY total_cases DESC
LIMIT 10

#### 示例 2:代码审查技能

.qwen/skills/code-review/
├── SKILL.md
├── reference.md
└── scripts/
└── lint.py


```markdown
---
name: code-review
description: 代码审查技能,当用户请求审查代码、检查代码质量或寻找 bug 时自动触发
---

# 代码审查技能

## 审查维度

### 1. 代码风格
- 命名规范(变量、函数、类)
- 代码格式(缩进、空行)
- 注释完整性

### 2. 安全检查
- SQL 注入风险
- XSS 漏洞
- 敏感信息泄露
- 认证授权问题

### 3. 性能评估
- 时间复杂度
- 空间复杂度
- 资源泄漏风险

### 4. 可维护性
- 代码重复
- 函数长度
- 模块耦合

## 审查流程

1. 读取目标文件
2. 运行 `scripts/lint.py` 进行静态分析
3. 人工审查识别潜在问题
4. 按优先级输出审查报告

## 报告格式

代码审查报告

文件:src/main/java/Example.java

✅ 优点
  • 代码结构清晰
  • 注释完整
⚠️ 问题

[高优先级] SQL 注入风险

  • 位置:第 42 行
  • 问题:使用字符串拼接构建 SQL
  • 建议:使用 PreparedStatement

[中优先级] 函数过长

  • 位置:processData() 方法
  • 建议:拆分为多个小函数

## 参考规范

详见 `reference.md`

8. Skills 的两种执行模式

8.1 模式一:Skills 直接调用 HTTPS

适用场景:简单的 API 调用,无需 MCP 中转

HTTPS API (外部服务) Skills (SKILL.md) 用户 HTTPS API (外部服务) Skills (SKILL.md) 用户 1. 请求分析数据 2. 生成脚本并执行 HTTP POST 3. 返回数据 4. 分析结果并生成报表

特点

  • ✅ 简单直接,无需额外服务
  • ✅ 适合简单的 API 调用
  • ✗ 敏感信息可能暴露
  • ✗ 无法复用 MCP 工具
SKILL.md 示例(直接 HTTPS)
---
name: weather-query
description: 天气查询技能,直接调用天气 API 获取实时天气数据
---

# 天气查询技能

## API 信息

- 基础 URL:`https://api.weather.com/v3/wx/conditions/current`
- 认证:API Key(从环境变量读取)

## 执行流程

### 1. 构建请求

```python
import requests
import os

api_key = os.getenv('WEATHER_API_KEY')
city = "{city_name}"

url = "https://api.weather.com/v3/wx/conditions/current"
params = {
    'q': city,
    'apiKey': api_key,
    'format': 'json'
}

2. 发送请求

response = requests.get(url, params=params)
data = response.json()

3. 解析结果

temperature = data['temperature']
condition = data['wxPhrase']
humidity = data['relativeHumidity']

print(f"{city}{condition}{temperature}°C,湿度{humidity}%")

输出格式

{城市名}:{天气状况},{温度}°C,湿度{湿度}%,{空气质量}

### 8.2 模式二:Skills → MCP → HTTP

**适用场景**:复杂业务、需要安全隔离、复用现有 MCP 工具

```mermaid
sequenceDiagram
    participant User as 用户
    participant Skills as Skills<br/>(SKILL.md)
    participant MCP as MCP Server<br/>(Spring Boot)
    participant API as 外部 API
    
    User->>Skills: 1. 查询 ECO 订单
    Skills->>MCP: 2. 调用 MCP 工具<br/>eco_query_...
    MCP->>API: 3. HTTP 请求
    API-->>MCP: 4. 返回数据
    MCP-->>Skills: 5. 返回订单数据
    Skills->>User: 6. 分析订单并生成报表

特点

  • ✅ 敏感信息隔离(API Key 在 MCP Server)
  • ✅ 复用现有 MCP 工具
  • ✅ 统一的错误处理和日志
  • ✅ 适合复杂业务场景
SKILL.md 示例(通过 MCP)
---
name: eco-order-analysis
description: ECO 订单分析技能,当用户需要查询 ECO 平台订单、分析销售数据时自动触发
---

# ECO 订单分析技能

## 可用 MCP 工具

本技能使用以下 MCP 工具:
- `eco_query_seller_orders` - 查询卖家订单列表
- `eco_query_order_detail` - 查询订单详情
- `eco_query_goods_price` - 查询商品价格

## 执行流程

### 1. 查询订单列表

调用 MCP 工具 `eco_query_seller_orders`:

**参数**:
- `steamId`: 用户的 Steam ID
- `startTime`: 开始时间(默认 30 天前)
- `endTime`: 结束时间(默认今天)
- `state`: 订单状态(8=待确认)
- `pageIndex`: 页码(默认 1)
- `pageSize`: 每页数量(默认 100)

### 2. 分析订单数据

分析维度:
- 订单总数
- 成交金额
- 待确认订单数
- 热门商品 Top10

### 3. 生成报表

按以下格式输出:

```markdown
# ECO 订单分析报告

## 时间范围:{start} ~ {end}

### 核心指标
- 订单总数:{count}
- 成交金额:{amount} 元
- 待确认:{pending}

### 热门商品 Top10
| 排名 | 商品 | 销量 |
|------|------|------|
| 1 | ... | ... |

注意事项

  • API Key 由 MCP Server 管理,无需在 Skills 中配置
  • 错误处理由 MCP Server 统一返回
  • 敏感数据不会在对话中显示

### 8.3 两种模式对比

| 维度 | 模式一:直接 HTTPS | 模式二:通过 MCP |
|------|-------------------|-----------------|
| **架构复杂度** | 简单 | 分层架构 |
| **敏感信息** | 可能在脚本中 | 隔离在 Server |
| **代码复用** | 低 | 高(复用 MCP 工具) |
| **错误处理** | 自行处理 | 统一处理 |
| **日志记录** | 自行实现 | 统一日志 |
| **适用场景** | 简单 API 调用 | 复杂业务系统 |
| **开发成本** | 低 | 较高(需维护 Server) |
| **安全性** | 较低 | 较高 |

### 8.4 选择建议

```mermaid
flowchart TD
    Start["需要调用外部 API 吗?"]
    
    Start -->|是 | Sensitive["涉及敏感信息<br/>(API Key)吗?"]
    Start -->|否 | NoAPI["仅需指令指导<br/>仅使用 Skills"]
    
    Sensitive -->|是 | MCP["使用 MCP 模式<br/>隔离敏感信息"]
    Sensitive -->|否 | HTTPS["直接 HTTPS 模式<br/>简单直接调用"]
    
    subgraph MCP_Recommend["推荐场景"]
        M1[企业 API]
        M2[多工具组合]
        M3[需要日志审计]
    end
    
    subgraph HTTPS_Recommend["推荐场景"]
        H1[公开 API]
        H2[一次性查询]
        H3[无需安全隔离]
    end
    
    MCP --- MCP_Recommend
    HTTPS --- HTTPS_Recommend
    
    style Start fill:#f9f9f9,stroke:#333
    style Sensitive fill:#f9f9f9,stroke:#333
    style NoAPI fill:#e1f5e1,stroke:#333
    style MCP fill:#ffe1e1,stroke:#333
    style HTTPS fill:#e1f5e1,stroke:#333

总结

核心要点回顾

  1. MCP 是 AI 与外部工具通信的标准化协议,类似 USB-C 接口
  2. MCP 与 HTTP 不是替代关系,MCP 可以基于 HTTP 传输
  3. 三种连接方式:STDIO(本地)、SSE(事件流)、Streamable HTTP(双向流)
  4. MCP 三种能力:Tools(执行)、Resources(读取)、Prompts(指导)
  5. Skills 是给 AI 的模块化使用说明书,通过 SKILL.md 定义
  6. MCP vs Skills:MCP 是运行时协议,Skills 是静态指令
  7. Skills 两种模式:直接 HTTPS(简单)和通过 MCP(安全)

最佳实践

  • 简单 API 调用 → Skills + 直接 HTTPS
  • 复杂业务系统 → Skills + MCP
  • 敏感信息 → 始终使用 MCP 隔离
  • 团队共享 → Skills 用 Git,MCP 用部署

文档版本:1.0
最后更新:2026 年 3 月 29 日

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐