【Python大语言模型系列】用 Python 快速搭建 MCP 服务器接入 大模型(案例+源码) 📅 2026/6/18 14:55:42 这是我的第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.pyFastMCP 服务器部署很灵活。测试阶段fastmcp run命令足够用。生产环境可以部署到 FastMCP Cloud它提供现成的 HTTPS 端点和认证服务。如果想自己托管的话也可以用 HTTP 或 SSE 传输从自己的服务器提供服务mcp.run(transporthttp, host0.0.0.0, port8080)部署完就能和语言模型、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 工具并按需调用。假设服务器暴露了add或summarize工具模型就能像调用内置功能一样使用它们。聊天场景下用户说总结下最新那篇文章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_urlBASE_URL, openai_api_keyAPI_KEY, modelMODEL_NAME, timeout60.0, max_retries2) # 创建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_toolsMCP会返回一个工具清单类似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、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创以最简单的方式理解和学习关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。