【MCP】创建第1个MCP服务器(数字比大小)

1、概述

在qwen2.5:0.5b这种小规格的模型中,数字之间比大小是一个难题,经常出现9.11和9.8比不清楚的问题,如下
[图片]

这时候,我们可以人为的给这个模型引入一个MCP工具,专门用来进行数字之间的比较。

2、服务端搭建

客户端配置及环境安装请参考文章:
【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置)
【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)

(1)初始化应用

在非中文路径下,创建一个文件夹,例如“MCP”用来存储源码,文件夹名字只要不是中文就行
然后打开刚刚新建的文件夹
[图片]

[图片]

默认会创建一个main.py没啥用,删掉即可
[图片]

打开终端
[图片]

输入

 uv init compare

compare就是默认创建的应用文件夹
[图片]

进入compare文件夹并执行初始化

cd compare
uv sync

[图片]

安装mcp库

uv add mcp[cli] --default-index https://pypi.tuna.tsinghua.edu.cn/simple

[图片]

安装好的库都在.venv文件夹内
[图片]

将.venv添加为项目的虚拟环境
[图片]

[图片]

选择现有的环境,python路径指定为.venv文件夹中的Scripts目录下的python.exe
[图片]

[图片]

(2)编写MCP服务端代码

双击main.py把里面的内容清空
[图片]

输入以下代码

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("compare")

@mcp.tool()
def compare(a: float, b: float)->str:
    """compare two numbers"""
    if a-b > 0:
        return f"正确答案:{a}>{b}"
    else:
        return f"正确答案:{b}>{a}"

if __name__ == "__main__":
    mcp.run(transport='stdio')

完毕后右键执行一下看看会不会报错
[图片]

运行窗口卡在这个页面,代表没问题,只要是不报错就行
[图片]

然后就可以点击停止按钮退出程序了
[图片]

前面是运行环境,后面是运行的脚本,脚本的路径保存好,一会会用到
[图片]

3、客户端配置

客户端配置及环境安装请参考文章:【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置)

(1)配置MCP客户端

配置之前,先测试一下比大小的能力,我们输入问题“数字9.11和数字9.8哪个大”,发现效果很差
[图片]

下面开始配置,点击左下角齿轮,进入配置界面
[图片]

选择ollama,配置qwen2.5模型
[图片]

点击“更多设置”,勾选“工具”
[图片]

保存后,就会在右侧显示一个小扳手图标,代表可以调用MCP工具
[图片]

选择左侧的MCP服务器,点击“添加服务器”
[图片]

配置一下MCP服务,名称可以起一个compare,方便查看。参数如下。

--directory
C:\Users\stone\Desktop\UV\mcp-compare
run
main.py

第2行的文件路径需要跟据main.py所在路径自行配置
[图片]

配置完后,点击右上角“保存”按钮。如果配置没问题,compare工具会自动打开,并且显示“服务器更新成功”字样
[图片]

(2)聊天测试

返回刚刚的聊天界面,下面就出现了一个cmd的图标,这个就是调用MCP工具的图标
[图片]

然后选择compare工具
[图片]

图标变绿代表已经加载了MCP工具
[图片]

我们新建一个话题,问他“请比较数字9.11和9.8哪个大”
[图片]

这里要注意,问题里一定要表达出“请比较”或相似的话术,模型才会自动根据意思调用compare工具
[图片]

我们可以看到,模型成功调用了MCP工具compare,并且实现了比大小的功能

### MCP协议简介 Model Context Protocol (MCP) 是一种用于实现大型语言模型(LLM)与外部数据源和工具之间无缝集成的开放协议[^4]。它采用经典的客户端-服务器(CS)架构,其中 **MCP Host** 表示需要通过 MCP 获取数据的应用程序,而 **MCP Server** 则是一个轻量级应用程序,负责暴露某些特定的功能或资源给主机。 #### 关键组件说明 - **MCP Host**: 如 Claude Desktop、IDE 或其他 AI 工具等,这些程序依赖于 MCP 来获取所需的数据或能力[^1]。 - **MCP Client**: 客户端部分通常由 MCP 协议驱动,能够一对一地连接到指定的 MCP Server 上[^3]。 - **MCP Server**: 负责对外提供某种特殊功能的小型化应用,比如访问本地文件系统、调用远程 API 等[^2]。 - **Local Data Resources**: 可供 MCP Server 访问的安全本地资源,例如文件夹、数据库或其他服务。 - **Remote Services**: 支持通过网络接口(API 形式)与其他外部系统建立通信通道。 --- ### 实现首个 MCP Server 的教程 以下是基于现有文档指导来创建并运行一个基础版本 MCP Server 所需的关键步骤: #### 准备工作环境 确保安装有 Python 和 pip 命令行工具,并且具备基本开发技能以便理解后续操作逻辑。如果尚未完成此环节,则先执行如下命令更新软件包管理器: ```bash pip install --upgrade pip setuptools wheel ``` 接着引入必要的库支持以简化编码过程中的复杂度处理问题: ```python import json from http.server import BaseHTTPRequestHandler, HTTPServer ``` 上述代码片段展示了导入 JSON 解析模块以及内置 Web 服务器框架的核心类定义方法。 #### 编写核心业务逻辑 下面给出一段简单的示例脚本作为起点,演示如何响应来自 MCP Host 请求的消息体内容转换成标准格式返回去的过程: ```python class MCPRequestHandler(BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length) try: request_json = json.loads(post_data.decode('utf-8')) response_payload = { 'status': 'success', 'message': f"Received data: {request_json}" } status_code = 200 except Exception as e: response_payload = {'error': str(e)} status_code = 400 self.send_response(status_code) self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write(json.dumps(response_payload).encode('utf-8')) def run(server_class=HTTPServer, handler_class=MCPRequestHandler, port=8080): server_address = ('', port) httpd = server_class(server_address, handler_class) print(f'Starting MCP Server on port {port}...') httpd.serve_forever() if __name__ == "__main__": run() ``` 这段代码实现了最基本的 POST 方法处理器 `do_POST` ,用来接收传入参数并通过异常捕获机制保障稳定性的同时反馈适当的结果状态码信息给调用方知道当前请求成功与否情况怎样。 #### 启动您的 MCP Server 保存以上全部修改后的完整版 python 文件至任意目录下命名为 mcp_server.py 并切换终端位置至此路径处输入以下指令即可启动监听模式等待连接到来: ```bash python mcp_server.py ``` 此时应该能看到类似这样的提示消息表示正常运作当中:"Starting MCP Server on port 8080..." 最后一步就是按照官方指南配置好对应平台上的插件选项指向刚才开启的服务地址便能正式投入使用啦! --- ### 注意事项 实际项目部署过程中可能还会涉及到安全性加固措施诸如身份验证机制设置等方面考量因素;另外考虑到跨域资源共享(CORS)策略限制也可能影响正常使用体验所以必要时候记得调整浏览器端权限设定或者利用反向代理技术绕过障碍达成目标效果哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值