什么是MCP?本地如何开发MCP Server

前言

MCP(Model Context Protocol)全称模型上下文协议,是由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。

AI工具会朝着两个方向发展:

  1. 掌握更多的信息
  2. 控制更多的工具

在没有联网搜索之前,大模型的数据来源只有训练数据的时候以及推理我们告诉他的东西。所以后来的rag、知识库都是让AI掌握更多的信息,而MCP的出现是为了让大模型控制更多的工具,赋予更多能力。

MCP

在 MCP 出现之前,如果大模型需要访问外部数据的时候了,通常使用 Function Calling 的方式。Function Calling 是通过给模型预设函数描述(包括函数名、参数说明、返回值格式等),让模型在合适的时候返回一个符合结构的 JSON 格式,外部系统再解析这个 JSON,调用实际的后端函数。

但 Function Calling 的方式没有一个统一的开发规范,你开发的函数我不能用,我开发的函数你不能用,而且开发起来很麻烦,为了解决这个问题,MCP 出现了。

MCP就是AI大模型的标准化工具箱,大模型可以通过MCP调用外界的AI工具,而AI工具在开发的时候也需要遵循MCP协议。MCP 允许应用程序以标准化方式为 LLM 提供上下文,将提供上下文的问题与实际的 LLM 交互分开

我们本地的数据,例如数据库、github上的代码,需要粘贴给AI工具的对话框中,他们获取到这样的数据。有了MCP之后,可以开发一个 MCP Server 来完成某个特定的功能,例如读取数据库,操作github以及获取当前时间等。

既然 MCP Server 实现了对外部服务端的调用,那么AI工具就要实现 MCP Client 去调用server,将server实现的工具接入进来。目前支持 MCP Client 的AI工具有 cursor、cline、windsuf等。

MCP 服务器可以提供三种主要类型的功能:

  1. 资源:客户端可以读取的类似文件的数据(例如 API 响应或文件内容)
  2. 工具:可由 LLM 调用的函数
  3. 提示:预先编写的模板,帮助用户完成特定任务

目前在网上已经可以找到各种功能的 MCP server。

MCP server 开发

那么,在本地中如何调用MCP,mcp提供了python、java、typescript的SDK,这里我使用 Python 的SDK。Python SDK 实现了完整的 MCP 规范,可轻松实现以下功能:

  1. 构建可连接到任何 MCP Server 的 MCP Client
  2. 创建公开资源、提示和工具的 MCP Server
  3. 使用 stdio 和 SSE 等标准传输
  4. 处理所有 MCP 协议消息和生命周期事件

1. SDK 安装

这里安装 uv 来管理项目。

curl -LsSf https://astral.sh/uv/install.sh | sh

按照提示,将 $HOME/.local/bin 目录下的 uv、uvx 命令添加到 PATH 中。并使用uv来创建一个新的项目。

# 创建新的项目
uv init mcp-demo
cd mcp-demo

# 创建并激活虚拟环境
uv venv
source .venv/bin/activate

# 安装依赖
uv add "mcp[cli]" 

这样一个uv管理的python mcp项目就初始化完成了。当然也可以使用pip来安装mcp的python sdk:

pip  install "mcp[cli]" 

安装过程中可能会出现包冲突的问题,我这里fastapi和sse-starlette依赖了不同版本的starlette,最后直接将冲突包升级到最新,解决了这个问题。

pip install --upgrade fastapi sse-starlette starlette

这样就完成了python开发MCP Server的SDK安装。

2. MCP Server 开发

这样就开始进行 MCP Server 的开发,通过一段时间学习,我发现* MCP Server 其实就是定义一些函数,让智能体调用*。在函数中可以实现简单逻辑、接口调用和各种操作,并通过注解赋予函数不同的能力。

我们定一个 server.py 文件,并开发一个简单的 MCP Server:

from mcp.server.fastmcp import FastMCP

# 创建 MCP 实例
mcp = FastMCP("Demo")

# 示例工具
@mcp.tool()
def add(a: int, b: int) -> int:
    return a + b

# 示例资源
@mcp.resource("greeting://{name}")
def greet(name: str) -> str:
    return f"Hello, {name}!"

# 启动服务
if __name__ == "__main__":
    print("Starting MCP server...")
    mcp.run()

分析上面代码,使用 FastMCP 来初始化一个 MCP Server 实例。我们分别创建了两个函数:

  1. add:输入两个数字实现累加
  2. greet:输入字符串,拼接后返回字符串

然后我们通过两个注解,赋予两个函数不同的能力:

  1. @tool() :函数可以直接被AI调用
  2. @resource() :像API接口一样被调用,其中的参数 greeting://{name} 是一个自定义的 URI, 可以拆解为两个部分。greeting 是前缀,随便起的,name是动态参数的名称,在访问的时候需要传入。

想要理解这两个注解的具体用法,可以接着往下看。

3. 测试

我们执行下面命令:

mcp dev server.py

安装并启动 MCP Inspector 对 server.py 中的 mcp server 进行调试。

在浏览器中访问 6274 端口就可以访问到 MCP Inspector。我们定义了mcp的tool和resource两种能力,在 MCP Inspector 中分别进行测试。

在 Tools 标签页下,我们可以看到我们定义的 add 累加函数。输入 a、b 两个参数,即可返回结果。

在 Resources 标签页下,可以看到我们定义的资源函数 greet

我们传入动态参数,mcp server 就会返回 json 格式的响应,并将我们输入的 aqi 拼接后返回。

结语

在本篇文章中,基于 Python 完成了一个简单的 MCP Server 的开发。MCP 让大模型能像调用 API 一样调用函数(tool)和资源(resource),实现更强的插件化和上下文理解能力,增强智能体的交互性和可扩展性。

<think>首先,用户的问题是:“我想了解MCP的含义和相关技术背景请问MCP是什么有哪些应用领域”。这基于系统级指令和提供的引用。系统级指令: -所有行内数学表达式必须使用$...$格式。 -独立公式必须使用$$...$$格式并单独成段。- LaTeX语法正确。-使用中文回答。-生成相关问题。 -回答中引用的段落末尾自然地添加引用标识,例如:[^1]用户可见层:-回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。-参考站内引用:有四个引用[^1]到[^4],我需要自然地融入这些引用。 引用内容:- [^1]:支持MCP协议的平台应用有哪些?提到Cursor、Claude Desktop、Cline、Windsurf和JetBrains IDEs支持MCP。- [^2]:什么是MCPMCP资源网站有哪些?把MCP比作USB协议,MCP Server像USB设备。- [^3]:第18章:MCP在创作领域中的应用。探讨MCP在创意生成、灵感管理等方面的应用。 -[^4]:AI圈“新顶流”MCP到底是什么?解释MCP是标准协议,使大模型与API无缝交互,与FunctionCalling和AI Agent相关。用户的问题核心是MCP的含义、技术背景和应用领域。我需要定义MCP: -从引用看,MCP是一个协议,类似于USB协议,用于连接AI工具和各种服务。 -具体来说,[^4]提到MCP是一个标准协议,使大模型与API无缝交互。 -[^2]解释MCP就像USB协议,MCP Server像设备。 技术背景:- MCP代表什么?引用中没有明确给出全称。在上下文中,可能是“Model CommunicationProtocol”或类似,但未指定。我应该基于引用描述。 -从[^4]:MCP是FunctionCalling和AI Agent的一部分,帮助AI模型调用函数和交互。应用领域: -[^1]:应用在编辑器、桌面应用如Cursor、Claude Desktop等。- [^3]:在创作领域,如写作、绘画、音乐创作。- [^4]:在AIAgent中,实现任务自动化和集成。 回答结构:1. **逐步解决问题**:先解释MCP是什么,然后技术背景,最后应用领域。2.**使用中文**。 3. **融入引用**:自然地添加引用标识在段落末尾。4.**生成相关问题**:在结尾添加§§相关问题§§部分。5.**数学表达式**:用户问题不涉及数学,但如果有数学内容,需用$...$或$$...$$。这里可能不直接相关,但确保LaTeX正确。 大纲回答:- **开头**:直接回答MCP是什么。 -**技术背景**:解释MCP的原理、作用。- **应用领域**:列出主要应用领域。 -**结尾**:生成相关问题。- **引用整合**:例如,在描述时添加[^2]等。 最终回答结构: -段落清晰。 -结尾有相关问题。</think>### MCP 的含义和技术背景 MCP(Model Communication Protocol,模型通信协议)是一种标准化的通信协议,旨在实现大型人工智能模型(如大语言模型)与外部系统、API 或工具的无缝交互。它类似于计算机领域的 USB 协议:如果 AI 工具被比作电脑主机,那么 MCP 就相当于 USB 协议,而 MCP Server 则类似于各种 USB 设备(如鼠标、键盘或 U盘),用于扩展 AI 的功能范围[^2]。通过 MCP,AI 模型可以动态调用函数、访问本地或远程服务,以及执行任务自动化,从而提升模型的智能化和集成能力。MCP 的核心价值在于它解决了 AI 模型与外部环境交互的标准化问题,避免了碎片化的定制接口,使开发者能更高效地构建 AI 驱动的应用[^4]。 技术背景方面,MCP 建立在 Function Calling(函数调用机制)的基础上,后者允许 AI 模型在运行时调用预定义函数来执行特定操作(如数据查询或工具使用)。MCP 则进一步标准化了这一过程,定义了一套统一的通信规范(包括消息格式、认证机制和错误处理),确保不同 AI 模型和 MCP Server 之间能互操作。例如,一个 MCP Server 可以实现为本地数据源接口或云服务 API,AI 模型通过 MCP 协议发送请求,Server 返回结构化数据供模型处理。这类似于网络协议中的 RESTful API,但针对 AI 场景优化,支持上下文记忆和规划功能,使 AI Agent(自主智能系统)能更可靠地执行复杂任务[^4]。MCP 的兴起源于大模型生态的发展,它降低了 AI 集成门槛,推动了工具链的标准化。 ### MCP 的应用领域 MCP 的应用领域广泛,主要集中在以下几个方面,得益于其灵活性和标准化特性: 1. **开发工具和编辑器**:MCP 被集成到代码编辑器和 IDE 中,实现 AI 辅助编程。例如,Cursor 和 JetBrains IDEs 支持 MCP,允许开发者通过 AI 模型实时调用代码补全、调试工具或版本控制系统,提升开发效率[^1]。 2. **桌面应用和自动化工具**:在桌面环境中,MCP 用于构建智能助手。如 Claude Desktop 和 Windsurf 应用利用 MCP 连接本地文件系统或远程服务,实现文档自动处理、数据提取或任务调度[^1]。 3. **创意和内容创作**:MCP 在创作领域发挥重要作用,支持 AI 辅助写作、绘画或音乐生成。通过整合上下文记忆和规划,MCP 能帮助管理灵感、迭代创意内容(例如生成故事草稿或优化设计),超越简单的风格迁移[^3]。 4. **AI Agent 和任务自动化**:作为 AI Agent 的核心组件,MCP 使大模型能自主调用 API 执行复杂任务,如数据分析、客户服务或系统集成。这在企业应用中尤为关键,支持无缝连接数据库、云服务或 IoT 设备[^4]。 随着 MCP 生态的扩展,其应用正从技术工具向更广泛的领域渗透,包括教育、医疗和金融,未来有望成为 AI 基础设施的标准组成部分[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值