解密prompt系列. MCP实战:从Low-Level到FastMCP的搭建演进
解密prompt系列. MCP实战从Low-Level到FastMPM的搭建演进大家好我是你们的技术老友。今天咱们来聊聊一个在AI应用开发里越来越重要的玩意儿——MCPModel Context Protocol。别被这个名字吓到它其实就是一套让大语言模型LLM能“伸手”去调用外部工具或数据的协议。想象一下你的AI聊天机器人不再是只会“纸上谈兵”而是能查天气、读文件、甚至操作数据库MCP就是那个“万能遥控器”。这篇文章会带你从最原始的“Low-Level”实现开始一步步演进到更优雅的“FastMCP”方式。咱们不扯虚的直接上代码让你看完就能自己搭一个MCP服务。## 什么是MCP为什么需要它在传统开发中LLM就像一个“闭门造车”的模仿者你问它“今天北京天气怎么样”它只能根据训练数据编一个答案而不是去实时查询天气API。MCP的出现就是为了解决这个痛点它定义了一套标准接口让LLM能通过“工具”与外部世界交互。简单来说MCP包含两个角色-MCP Server提供具体功能比如天气查询、文件读写-MCP ClientLLM调用这些功能的桥梁早期实现MCP需要手写很多底层代码就像自己造轮子后来出现了一些框架比如FastMCP让整个过程变得像搭积木一样简单。下面我们先看“造轮子”的Low-Level方式。## 从Low-Level开始手写一个MCP Server假设我们要写一个简单的MCP Server提供“获取用户年龄”的功能。Low-Level方式至少需要处理JSON-RPC协议、消息序列化、请求路由等。这听起来很复杂但别怕我们用一个最小化例子来演示。python# low_level_mcp_server.pyimport jsonimport socket# 模拟一个“年龄查询”工具def get_user_age(name): # 这里可以换成真实数据库查询 data {Alice: 30, Bob: 25} return data.get(name, 未知用户)# 处理MCP请求的核心函数def handle_request(request): # 解析JSON-RPC格式的请求 try: req json.loads(request) method req.get(method) # 提取方法名 params req.get(params, {}) if method get_user_age: result get_user_age(params.get(name)) return json.dumps({jsonrpc: 2.0, result: result, id: req.get(id)}) else: return json.dumps({jsonrpc: 2.0, error: {code: -32601, message: 方法不存在}}) except Exception as e: return json.dumps({jsonrpc: 2.0, error: {code: -32700, message: str(e)}})# 启动一个简单的TCP服务器def start_server(host127.0.0.1, port8080): server socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) server.listen(5) print(fLow-Level MCP Server running on {host}:{port}) while True: conn, addr server.accept() data conn.recv(1024).decode() if data: response handle_request(data) conn.send(response.encode()) conn.close()if __name__ __main__: start_server()这段代码虽然能跑但问题很多- 所有协议细节JSON-RPC版本号、错误码都要手动处理- 增加新工具比如查天气就需要修改handle_request里的if-else- 没有并发能力一次只能处理一个请求这就是Low-Level的痛点开发效率低容易出错。在实际项目中你会发现自己写了大量与业务无关的“胶水代码”。## 进阶用FastMCP让一切变简单现在轮到主角登场了——FastMCP。它像一个“MCP框架”帮我们封装了所有底层细节让我们只需关注业务逻辑。最棒的是FastMCP支持装饰器语法用起来就像Flask一样清爽。python# fast_mcp_server.pyfrom fastmcp import FastMCP# 创建MCP Server实例mcp FastMCP(用户服务)# 定义一个工具用装饰器自动注册mcp.tool()def get_user_age(name: str) - str: 获取指定用户的年龄 data {Alice: 30, Bob: 25} age data.get(name, 未知用户) return f{name}的年龄是{age}岁# 定义第二个工具查询用户地址模拟mcp.tool()def get_user_address(name: str) - str: 获取用户地址信息 addresses {Alice: 北京市朝阳区, Bob: 上海市浦东新区} addr addresses.get(name, 未找到地址) return f{name}的地址是{addr}# 启动服务一行搞定if __name__ __main__: mcp.run(host127.0.0.1, port8080)看到区别了吗只需要两件事1. 创建FastMCP实例2. 用mcp.tool()装饰你的函数其他所有事情——协议解析、错误处理、并发支持——FastMCP都默默搞定了。而且每个工具函数都有清晰的类型注解和文档字符串这对LLM理解工具用途至关重要因为LLM会读取这些文档来知道什么时候调用哪个工具。## Low-Level vs FastMCP关键对比| 方面 | Low-Level | FastMCP ||------|-----------|---------|| 代码量 | 约50行仅基础功能 | 约15行 || 协议处理 | 手动实现JSON-RPC | 自动处理 || 新增工具 | 修改if-else逻辑 | 加个装饰器函数 || 错误处理 | 手动捕获异常 | 内置错误映射 || 可维护性 | 低所有工具耦合在一起 | 高每个工具独立 |更重要的是FastMCP还内置了-自动服务发现LLM可以通过标准接口查询MCP Server提供了哪些工具-并发请求底层使用异步IO能同时处理多个请求-标准错误码所有错误都符合MCP规范## 实战让FastMCP服务与LLM对话光有服务不行还得让LLM能用上。下面是一个简单的MCP Client示例模拟LLM调用工具python# mcp_client.pyimport requestsimport json# 向MCP Server发送请求def call_mcp_tool(tool_name, params): # FastMCP默认使用HTTP传输这里模拟简单的POST请求 url http://127.0.0.1:8080/mcp # 假设FastMCP暴露的端点 payload { jsonrpc: 2.0, method: tools/call, params: { name: tool_name, arguments: params }, id: 1 } response requests.post(url, jsonpayload) return response.json()# 模拟LLM的思维过程if __name__ __main__: # 假设LLM决定调用get_user_age工具 user_query Alice多大了 print(f收到用户问题{user_query}) # LLM会解析出需要调用get_user_age工具 result call_mcp_tool(get_user_age, {name: Alice}) print(fMCP工具返回{result}) # 实际LLM会进一步处理结果生成自然语言回答 age_data result.get(result, {}) print(f最终回答Alice今年{age_data.split()[1]})注意真实场景中LLM会自己决定何时调用哪个工具但这里我们展示了底层调用机制。FastMCP的Client SDK还提供了更高级的封装比如自动与OpenAI API对接。## 总结从Low-Level到FastMCP我们见证了一个技术演进的故事从手动处理每一个字节到用装饰器声明式地定义工具从复杂的if-else路由到自动化的服务发现。这种演进背后是“关注点分离”的哲学——让开发者只关心业务逻辑框架负责处理基础设施。如果你正在构建一个需要与LLM交互的应用我的建议是1. 起步就用FastMCP它已经足够成熟2. 把工具函数设计成“纯函数”——输入输出明确副作用最小3. 给每个工具写清晰的文档字符串这相当于给LLM的“使用说明书”最后记住MCP不是魔法它只是一个协议。它让AI从“知道”变成了“能行动”而这正是未来AI应用的核心竞争力。希望这篇文章能帮你跨出第一步去搭建属于你自己的MCP服务。下次见

相关新闻

2026年汽博正规靠谱中医诊所选择指南:获取电话及挑选要点

2026年汽博正规靠谱中医诊所选择指南:获取电话及挑选要点

开头:技术痛点/趋势引入2026年,随着人们对健康重视程度的不断提高,中医诊疗越来越受到关注。在汽博地区,许多人都希望找到一家正规靠谱的中医诊所来调理身体。然而,当前市场上中医诊所众多,质量参差不齐&am…

2026/10/22 1:41:46 阅读更多 →
QtScrcpy深度探索:跨平台Android投屏控制技术的实战解析

QtScrcpy深度探索:跨平台Android投屏控制技术的实战解析

QtScrcpy深度探索:跨平台Android投屏控制技术的实战解析 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在移动设备开发、游戏测试和自动化运维领域,如何高效…

2026/10/22 18:30:19 阅读更多 →
杂牌清洁度仪 PK 大牌清洁度仪,便携式与台式清洁度仪场景适配与性能测评

杂牌清洁度仪 PK 大牌清洁度仪,便携式与台式清洁度仪场景适配与性能测评

“在汽车清洁度检测领域,到底是选择杂牌清洁度仪,还是值得信赖的大牌清洁度仪呢?”这是许多从业者心中的灵魂拷问。今天,我将以专业的视角为大家剖析这两者的差异。阅读本文,你将获得清晰的品牌对比数据、实用的场景化…

2026/10/21 22:50:24 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/22 21:33:42 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 22:56:44 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 22:56:12 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 19:06:46 阅读更多 →