MCP (Model Context Protocol) 介紹

MCP (Model Context Protocol) 介紹

MCP 天气服务器的演示项目。

RaymondLiao404

研究与数据
访问服务器

README

MCP (模型上下文协议) 介绍

MCP 是 Anthropic 在 2024 年 11 月推出的标准化工具调用协议,让大型语言模型能够:

  1. 动态探索外部工具(如天气 API、数据库、GitHub 等)
  2. 使用结构化参数自动调用工具
  3. 执行复合式任务流程(如天气查询任务)

目录

  1. 什么是 MCP
  2. MCP 核心问题解析
  3. MCP 运作原理
  4. MCP 配置方法
  5. MCP Server中工具使用流程设计

什么是 MCP

MCP (Model Context Protocol) 是由开发 Claude 模型的美国新创公司 Anthropic 推出的标准化工具箱,它为大型语言模型提供了与外部工具和 API 交互的统一框架。

简而言之:MCP 是大模型的标准化工具箱。

MCP 核心问题解析

1. 大模型如何发现工具箱中的工具?

MCP 提供标准化工具发现机制,每个 MCP 服务器需公布:

  • 🔧 工具名称
  • 📝 功能描述
  • 🛠️ 参数格式
  • 🧪 使用示例

2. 工具调用参数规范

MCP 工具参数使用 JSON Schema 规范定义:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "param1": {"type": "string"},
    "param2": {"type": "number"}
  }
}

3. MCP 与 Function Call 关系

Function Call 是大型语言模型调用外部功能的一种机制,而 MCP 可以被视为 Function Call 的标准化和扩展版本。

特性 Function Call MCP 优势
标准化程度 各平台实现不同 统一跨平台调用接口
工具发现 静态定义 动态工具发现机制
功能范围 基本工具调用 复合工具流程支持
兼容性 特定模型专用 多层适配架构
参数验证 有限 完整 JSON Schema 支持
上下文处理 单次调用 支持多轮上下文

MCP 在设计上是 Function Call 的进一步发展和标准化,它提供了更完整的框架来处理模型与外部工具的交互,特别是在处理复杂的多步骤工作流程时更加强大。

4. 模型兼容性

  • ✅ 原生支持 function call 模型
  • 🔄 需适配层转换模型
  • 🌐 通用协议设计

MCP 运作原理

MCP 采用三阶段循环架构:

  1. 上下文初始化

    • 模型载入基础环境设定
    • 建立通讯管道
  2. 动态数据交换

    graph LR
    A[模型] -->|请求| B(MCP服务器)
    B -->|响应| A
    
  3. 持续优化阶段

    • 模型根据任务需求动态选择工具
    • 根据工具回传结果调整后续行动

MCP 配置方法

MCP 传输模式比较:Stdio vs SSE

Model Context Protocol (MCP) 支持多种传输模式,其中最常用的是 Stdio 和 SSE。本文档简要对比这两种传输方式的差异与通讯特点。

特性 Stdio SSE
全名 Standard Input/Output Server-Sent Events
通讯模型 进程间通讯 HTTP 长连接推送
适用场景 本地开发与测试 分布式系统与网络服务

通讯模式对比

graph TD
    subgraph "Stdio 通讯模式"
        A[模型/客户端] <-->|stdin/stdout| B[MCP 工具服务]
    end

    subgraph "SSE 通讯模式"
        C[模型/客户端] -->|HTTP POST 请求| D[MCP 工具服务]
        D -->|事件流推送| C
    end

不同传输模式配置方法

Stdio (Standard Input/Output)

# 服务器配置 > transport="stdio"
if __name__ == "__main__":
    print("Starting MCP server...")
    mcp.run(transport="stdio")
//客户端配置示例
{
  "Weather_MCP": {
    "command": "python",
    "args": [
      "./server.py",
      "run",
      "server.py"
    ],
    "disabled": false,
    "autoApprove": []
  }
}
  • 通讯方式:透过标准输入/输出流进行资料交换
  • 连接方式:直接进程启动,没有网络开销
  • 资料流向:双向、同步的资料流
  • 优势:设置简单,适合快速开发和测试
  • 限制:仅限于本地机器上的工具调用

SSE (Server-Sent Events)

# 服务器配置 > transport="sse"
if __name__ == "__main__":
    print("Starting MCP server...")
    mcp.run(transport="sse")
// 客户端配置示例
{
  "Weather_MCP": {
    "url": "http://localhost:8000/sse"
  }
}
  • 通讯方式:基于 HTTP 协议的单向服务器推送
  • 连接方式:HTTP 长连接
  • 资料流向:主要是服务器到客户端的推送
  • 优势:支持分布式部署,跨网络调用
  • 限制:需要网络连接和合适的防火墙设置

MCP Server中工具使用流程设计

配置到VScode Cline客户端

将工具配置到VScode Cline客户端

以查询「我明天要去花莲玩 有哪些推荐的景点 天气怎样?」为例:

flowchart TD
    A[使用者输入:明天去花莲玩,想知道天气与景点] --> B[Lat_Lan_Tools<br/>取得经纬度]
    B --> C[Weather_Tools<br/>根据经纬度查询天气]
    C --> D{有景点推荐工具吗?}
    D -- 是 --> E[呼叫景点工具<br/>取得推荐景点]
    D -- 否 --> F[使用模型知识<br/>列出知名景点]
    E --> G[组合天气与景点回答]
    F --> G[组合天气与景点回答]

步骤一:查询经纬度 调用'Lat_Lan_Tools'

向大语言模型询问「我明天要去花莲玩 有哪些推荐的景点 天气怎样?」

get_lat_lan("花莲")

模型会根据工具描述自行填入参数: Arguments:

{
  "place": "花莲"
}

Response:

{
  "latitude": 23.991,
  "longitude": 121.6015
}

步骤二:查询天气预报 调用'Weather_Tools'

使用 Weather_Tools 传入上一步经纬度,取得天气资讯。

get_weather(latitude=23.991, longitude=121.6015)

模型会根据工具描述自行填入参数: Arguments:

{
  "lat": 23.991,
  "lon": 121.6015
}

Response:

{"coord": {"lon": 121.601, "lat": 23.9926}, "weather": [{"id": 804, "main": "Clouds", "description": "\u9670\uff0c\u591a\u96f2", "icon": "04n"}], "base": "stations", "main": {"temp": 20.73, "feels_like": 21.13, "temp_min": 20.73, "temp_max": 20.73, "pressure": 1018, "humidity": 87, "sea_level": 1018, "grnd_level": 954}, "visibility": 10000, "wind": {"speed": 2.11, "deg": 309, "gust": 1.4}, "clouds": {"all": 100}, "dt": 1744725312, "sys": {"type": 2, "id": 2096350, "country": "TW", "sunrise": 1744666338, "sunset": 1744712078}, "timezone": 28800, "id": 1668885, "name": "Shuiyuandi", "cod": 200}

步骤三:补充景点推荐 没有相关工具

未找到景点相关工具时,模型根据现有知识提供资讯

最后总结输出结果

花莲明日天气预报:
- **天气状况:多云
- **温度:20.73°C
- **体感温度:21.13°C
- **湿度:87%
- **风速:2.11 m/s

推荐景点:
1. 太鲁阁国家公园 - 以壮丽峡谷和步道闻名
2. 七星潭 - 新月形海湾适合观赏日出和星砂
3. 鲤鱼潭 - 环湖自行车道与水上活动
4. 东大门夜市 - 在地美食聚集地(推荐炸弹葱油饼)
5. 雲山水夢幻湖 - 落羽松秘境與生態園區

这种多步骤工具呼叫设计展示了 MCP 在复杂任务中的应用能力。

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python