什么是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),实现更强的插件化和上下文理解能力,增强智能体的交互性和可扩展性。

### 如何在本地搭建 MCP Server 并连接到 Cherry Studio 要在本地环境中成功搭建 MCP (Model Context Protocol) Server 并将其接入 Cherry Studio,可以按照以下方式操作: #### 1. 安装 Python 和必要的依赖项 为了运行 MCP Server,首先需要安装 Python 环境以及相关的库。Python 是一种广泛使用的编程语言,在此场景下用于实现服务器逻辑。 确保已安装最新版本的 Python,并通过 pip 命令安装所需的包: ```bash pip install flask requests model-context-protocol ``` 上述命令会安装 Flask Web 框架以及其他可能需要用到的支持库[^2]。 #### 2. 配置 MCP Server 基于文档中的指导,可以通过简单的脚本快速构建一个基本的功能性 MCP Server。下面是一个基础示例代码片段,展示如何设置并启动一个 MCP Server 实例: ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/mcp', methods=['POST']) def handle_mcp_request(): data = request.json # 处理传入的数据... response_data = {"status": "success", "message": f"Received {data}"} return jsonify(response_data) if __name__ == '__main__': app.run(host='0.0.0.0', port=8080) ``` 这段代码定义了一个 HTTP POST 接口 `/mcp` 来接收来自客户端的消息请求,并返回处理后的响应数据。可以根据实际需求扩展该接口功能来满足更复杂的应用场景。 #### 3. 连接到 Cherry Studio 完成 MCP Server 的部署之后,下一步就是让其能够被 Cherry Studio 所识别和访问。这通常涉及到修改应用程序内的配置文件或者界面选项以指定目标地址和服务端口号等参数[^1]。 具体来说,打开 Cherry Studio 软件后寻找有关外部服务集成的部分;在此处输入刚才所设定好的 localhost URL 地址(例如 `http://localhost:8080/mcp`),保存更改即可尝试建立初步联系测试连通状态是否正常。 如果一切顺利的话,则应该可以看到双方之间已经形成了有效的通信链路! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值