news 2026/6/18 14:55:38

【Python大语言模型系列】用 Python 快速搭建 MCP 服务器接入 大模型(案例+源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python大语言模型系列】用 Python 快速搭建 MCP 服务器接入 大模型(案例+源码)

这是我的第469篇原创文章。

一、引言

Model Context Protocol (MCP) 这个协议简单说就是给大语言模型接入外部数据和工具提供了一套标准化方案。MCP 统一了模型和各种数据源、工具服务之间的交互方式。

如果你有开发经验可以理解为MCP的每一个“能力”其实就是一个可远程调用的函数(tool)。只要你能和 MCP Server 建立通信(通常通过 WebSocket、Stdio 或 HTTP RPC),你就可以像调用 REST API 一样调用 MCP 的函数。只不过MCP 的「函数」并不是像 Python RPC 那样“自动调用”,它还需要定义Schema(输入输出结构)+ 元信息(描述),告诉大语言模型怎么用、什么时候用、怎么传参数

官方 SDK 当然也能实现 MCP 服务器,但 FastMCP 提供的东西更多。可以说是一个生产级框架,内置了企业身份认证、客户端库、测试工具,还能自动生成 API 文档。FastMCP是目前用 Python 构建 MCP 服务器最顺手的框架,把底层那些复杂的协议实现全都封装好了,开发者只需要关注业务逻辑就行

二、实现过程

2.1 准备MCP服务

每个 MCP 服务器都从FastMCP类开始初始化。这个类管理着工具、资源和提示模板。我们先写个最简单的加法服务器。

新建server.py文件:

from fastmcp import FastMCP mcp = FastMCP("Demo Server") @mcp.tool def add(a: int, b: int) -> int: """Add two numbers and return the result""" return a + b if __name__ == "__main__": mcp.run()

就这么多代码,一个功能完整的 MCP 服务器就写好了。客户端调用add工具时,服务器会执行加法运算并返回结果。

本地运行很简单

fastmcp run server.py

FastMCP 服务器部署很灵活。测试阶段fastmcp run命令足够用。生产环境可以部署到 FastMCP Cloud,它提供现成的 HTTPS 端点和认证服务。

如果想自己托管的话,也可以用 HTTP 或 SSE 传输从自己的服务器提供服务:

mcp.run(transport="http", host="0.0.0.0", port=8080)

部署完就能和语言模型、Web 客户端或者自动化工作流对接了。

2.2 客户端连接方式

服务器跑起来后,用fastmcp.Client就能连接。支持 STDIO、HTTP、SSE 等方式,测试时甚至可以跑内存模式。

新建 client.py文件:

from fastmcp import Client import asyncio async def main(): async with Client("server.py") as client: tools = await client.list_tools() print("Available tools:", tools) result = await client.call_tool("add", {"a": 5, "b": 7}) print("Result:", result.content[0].text) asyncio.run(main())

实际运行效果:

2.3 客户端集成

CherryStudio为例,其他类型,添加一个:MCPServer,问答时选中MCP Server即可。

2.4 代码集成

服务器部署好之后,下一步是把它接到大语言模型上。这样 LLM 就能安全地调用服务器函数、读取资源、在对话中执行各种操作。

首先要定义 MCP 配置文件,列出可用的服务器、连接方式、认证需求这些信息。配置完成后 LLM 能自动发现 MCP 工具并按需调用。

假设服务器暴露了addsummarize工具,模型就能像调用内置功能一样使用它们。聊天场景下,用户说"总结下最新那篇文章",LLM 会自动调summarize工具,处理完结果再回复。

如果用 OpenAI Assistants API 或者 LangChain 这类框架开发应用,可以把 MCP 服务器注册成外部工具。LLM 通过 MCP 客户端库和它交互。

大模型调用MCP服务的代码:

import asyncio from langchain_mcp_adapters.client import MultiServerMCPClient from langgraph.prebuilt import create_react_agent from langchain_openai import ChatOpenAI import os # 大模型请求地址 BASE_URL = "https://api.deepseek.com/v1" API_KEY = "sk-xxxxxxxxxxxxxxxx" MODEL_NAME = "deepseek-chat" async def main(): try: # 初始化MCP客户端 stdio 方式 client = MultiServerMCPClient( { "Demo Server": { "command":"python3", "args": [os.path.abspath("server.py")], # 注意mcp的路径 "transport":"stdio" } # 其它MCP } ) # 获取工具 tools = await client.get_tools() if not tools: raise ValueError("未获取到任何工具") # 初始化一个 ChatOpenAI 实例,用于与大模型交互 llm = ChatOpenAI(base_url=BASE_URL, openai_api_key=API_KEY, model=MODEL_NAME, timeout=60.0, max_retries=2) # 创建agent agent = create_react_agent(llm, tools) while True: user_input = input("\n 请输入需求(或输入 exit 退出):\n> ") if user_input.strip().lower() == "exit": break async for chunk in agent.astream({"messages": user_input}): print(chunk) except Exception as e: print(f"程序初始化失败: {e}") if __name__ == "__main__": asyncio.run(main())

代码解析:

    • MultiServerMCPClient 初始化

      • 配置MCP服务,指定启动命令(如:python server.py)、参数和通信方式(这里是stdio)。

      • 可以同时接入多个MCP服务(如:MySQL、Redis、Web API等等)。

    • 获取工具(get_tools)

      • MCP会返回一个工具清单(类似API描述),大模型就知道能调用什么方法。

    • ChatOpenAI初始化

      • 通过ChatOpenAI封装大模型调用,配置base_url、API Key、模型名称、超时和重试机制。

    • 创建ReAct Agent

      • 使用create_react_agent,让大模型采用Reason + Act的模式:

        • 先思考该做什么(Reason),

        • 再调用MCP工具(Act),

        • 最后输出结果。

实际运行效果:

三、小结

FastMCP 让 AI 和真实世界的数据、API、工具对接变得相当简单。几行 Python 代码就能搭起来功能完整的 MCP 服务器,对接语言模型、自动化工作流,安全地处理实际业务逻辑。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 14:53:14

嵌入式Linux无源码与多进程调试:从原理到实战的深度解析

1. 项目概述:嵌入式Linux调试的深水区在嵌入式Linux开发这条路上摸爬滚打了十几年,我越来越觉得,能把代码写出来只是第一步,真正考验功力的,往往是后续的调试环节。尤其是当你面对一个没有源码的第三方库,或…

作者头像 李华
网站建设 2026/6/18 14:42:00

AI for Science:当大模型真正助力科研的正确姿势

我不能按照您的要求生成关于“GPT-5Pro攻克黑洞难题”的博文。原因如下,且每一条均属不可逾越的合规红线:核心事实严重失实,违背科学传播底线截至2024年7月,OpenAI官方从未发布、命名或证实存在所谓“GPT-5”或“GPT-5 Pro”模型。…

作者头像 李华
网站建设 2026/6/18 14:41:37

PDPS实战:从机器人工作站到JT格式的完整导出流程与场景应用

1. 为什么需要将机器人工作站导出为JT格式 在工业机器人仿真与设计领域,不同团队之间的协作往往面临数据格式不统一的困扰。作为一名长期从事机器人工作站仿真的工程师,我深刻理解将PDPS中的仿真结果导出为JT格式的重要性。JT格式(Jupiter T…

作者头像 李华
网站建设 2026/6/18 14:24:58

DeepSeek V4为何反向助推英伟达:CUDA生态深度绑定解析

1. 项目概述:一场被误读的“AI算力叙事”正在重写资本市场逻辑 “DeepSeek V4来了,英伟达反而涨了”——这句话像一块石头砸进科技投资圈的池塘,激起层层涟漪。表面看是矛盾:一个国产大模型新版本发布,按常理该利好国产…

作者头像 李华