社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用 Python 开发 MCP 服务很简单,完整案例!

Python编程时光 • 3 天前 • 34 次点击  

模型上下文协议 MCP 是一种开放协议,旨在标准化 AI 应用程序与外部数据源和工具的连接方式。其核心目标在于简化大型语言模型 LLM 与各种上下文和工具的集成,从而解决将多种 LLM 与多种工具相集成的复杂性问题。

之前的文章介绍了一个挺不错的 MCP 应用案例,

用 MCP 让大模型自动批量下载文献,太香了!

但你有没有想过,自己动手打造一个 MCP 服务呢?想象一下,亲手设计一个智能工具,无论是处理数据、调用外部 API,还是生成自定义报告。这种创造力和掌控力的体验,会不会更香呢?

MCP 本身是一个通用的协议,设计上是为了跨语言和跨平台的,因此可以使用各种语言来编写服务,比如常用的 Node.js。但如果不熟悉 Web 开发,也想自己写一写呢?Python 自然是不二之选。只是 MCP 具体的协议挺复杂的,很难快速上手。

不过,现在好了,因为有了 FastMCP,它是一个 Python 软件开发工具包 (SDK),专门设计用于简化构建 MCP 服务的过程。它提供了一个高级且符合 Python 语言习惯的接口,用于定义工具、资源和提示。FastMCP 的核心优势在于其能够帮助开发者更轻松地创建符合 MCP 规范的服务,而无需深入了解底层的协议细节。

但值得注意的是,你看网上代码会涉及两个 FastMCP 包,其中一个是,

https://github.com/jlowin/fastmcp

另一个则是官方的,

https://github.com/modelcontextprotocol/python-sdk

这两个什么关系呢?其实是官方收编了上面第一个包,但官方集成的是 fastmcp 的 v1.0 版本。然而,jlowin 继续开发 fastmcp,还发布了 v2.0 版本,其中包含代理和客户端采样等新功能。

使用的话这两个都可以,先看第一个的安装和导入,

pip install fastmcp
from fastmcp import FastMCP

官方的安装和导入如下所示,

pip install mcp
from mcp.server.fastmcp import FastMCP

本文使用官方 Python SDK 里的 FastMCP 来构建自己的 MCP 服务。

我们先来看一个最简单的例子。

./demo/server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Demo 🚀")

@mcp.tool()
def add_2_numbers(a: int, b: int) -> int:
    """两个数字相加"""
    return a + b

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

这个例子展示了如何使用 FastMCP 库来创建一个简单的 MCP 服务器,它提供一个基本的工具(工具名:add_2_numbers),用于两个数字相加。这是一个非常简单的入门示例,适合理解 MCP 服务器的工作原理和 FastMCP 的基本用法。

  • 首先,从 mcp.server.fastmcp 模块中导入了 FastMCP 类。接着,创建了一个 FastMCP 类的实例,命名为 mcp。FastMCP 是服务器的核心类,它负责管理工具、资源和通信。参数「Demo 🚀」是服务器的名称,用于标识这个 MCP 服务器。
  • 然后,@mcp.tool() 是一个装饰器(decorator),它告诉 FastMCP 将 add_2_numbers 函数注册为一个可供客户端调用的工具。文档字符串("""两个数字相加"""):这是函数的描述,客户端(如 MCP Inspector)会显示这个描述,帮助用户理解工具的功能。
  • 这个工具可以被外部客户端调用,例如通过 MCP 协议发送请求,传入两个整数 a 和 b,服务器会返回它们的和。例如,如果客户端调用 add_2_numbers(3, 5),服务器会返回 8。
  • mcp.run(transport='stdio') 启动 MCP 服务器,进入监听状态,等待客户端的连接和请求。transport='stdio' 指定了通信方式为标准输入输出(Standard I/O)。这意味着服务器通过命令行的标准输入(stdin)和标准输出(stdout)与客户端通信,适合本地开发和测试。如果需要远程通信,可以更改为其他传输方式(如 'sse'Server-Sent Events)。

运行效果:

运行 python ./demo/server.py,服务器会启动并监听 stdio。任何支持 MCP 协议的客户端(例如 MCP Inspector 或 Claude Desktop)都可以连接到它,调用 add_2_numbers 工具。

比如,可以通过 MCP Inspector 测试一下这个工具。




    
% mcp dev ./demo/server.py
Need to install the following packages:
@modelcontextprotocol/inspector@0.8.2
Ok to proceed? (y) y
图片

浏览器中打开 http://127.0.0.1:6274,可以测试一下上面这个 mcp 服务里提供的 tool。

图片

这个 mcp 过于简单,咱们就不安装来用了。下面我们手撸一个稍微复杂一点的 mcp 服务,并安装上真正使用起来。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181412
 
34 次点击