MCP的服务开发及测试


前言

最近MCP的发展算是非常迅猛,所以第一时间去学习了下。


一、MCM是什么?

用官方的内容

"The Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. Whether you’re building an AI-powered IDE, enhancing a chat interface, or creating custom AI workflows, MCP provides a standardized way to connect LLMs with the context they need.

翻译:

模型上下文协议 (MCP) 是一种开放协议,可在 LLM 应用程序与外部数据源和工具之间实现无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式来将 LLM 与它们所需的上下文连接起来。

我的就理解他就是中间件。在程序中似乎没有什么是中间件没法解决的,MCP就是大模型和应用之间的中间件。现在一堆大佬说的mcp是啥,大家想了解可以去搜索下。

二、MCP Server

1.安装库

pip install mcp[cli]

2.编写服务端代码

代码如下:

# demo_server.py
from mcp.server.fastmcp import FastMCP
import re

mcp = FastMCP("check")

@mcp.tool()
def validate_email(email: str) -> bool:
    """判断邮箱格式是否合法"""
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return bool(re.match(pattern, email))

@mcp.tool()
def validate_phone(phone: str) -> bool:
    """判断电话号码格式是否合法(支持中国大陆手机号码)"""
    pattern = r'^1[3-9]\d{9}$'
    return bool(re.match(pattern, phone))

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

3.运行服务

python demo_server.py

4.调测

这里用map他们自己的工具inspector 来调测。
要先安装node 后执行下面的命令 就可以自动 安装/启动

npx @modelcontextprotocol/inspector node build/index.js

看到🔍 MCP Inspector is up and running at http://127.0.0.1:6274 🚀就是启动成功了。

浏览器打开配置mcp服务:

在这里插入图片描述

配置 mcp服务:

在这里插入图片描述

Transport Type: 选择STDIO 调用本地服务。
Command : 运行指令。因为我这是python 就选择了python具体的路径E:\\APP\\Anaconda3\\envs\\mcp_env\\python.exe
Arguments: 执行参数。这里填入具体的python文件路径。

查看工具

点击 connect 、出现绿点就是成功了,然后点击 Tools -> List Tools 成功看到我们的方法

在这里插入图片描述
选择工具后就可以调测了。

5 Client 使用MCP

MCP 服务搞定啦。现在,就让大模型用上它,我直接用 Cursor 里的 MCP 来演示咋配置。

点击Cursor 右上角 设置 -> MCP
在这里插入图片描述

加入配置

{
  "mcpServers": {
    "hello": {
      "disabled": false,
      "timeout": 60,
      "command": "E:\\APP\\Anaconda3\\envs\\mcp_env\\python.exe",
      "args": [
        "E:\\mcp\\demo_server.py"
      ],
      "transportType": "stdio"
    }
  }
}

然后就能在对话中让Cursor调用我的方法
在这里插入图片描述

注意:这里对话要选Agent,对话过程要介入

在这里插入图片描述
在这里插入图片描述


总结

哎呀,AI 这发展速度真是有点让人反应不过来呀。就说去年吧,还处在用 function call 的阶段呢,近期这 MCP 好像就成大趋势了,更别说还有个 agent2Agent 了,AI 应用的开发那可以说是越来越便捷了。

### 使用Python开发MCP服务的核心步骤 #### 环境准备 为了成功运行MCP服务开发者需要确保已安装必要的软件和依赖项。以下是所需的主要组件及其安装方法: - **Python 3.8+**: MCP服务要求使用较新版本的Python来提供更好的兼容性和性能支持[^1]。 - **pip**: 这是Python的标准包管理工具,用于安装其他所需的库。 - **mcp-sdk-python**: 官方提供的SDK,可以通过以下命令安装: ```bash pip install mcp-sdk-python ``` - **FastAPI 和 Uvicorn**: FastAPI是一个现代、快速(高性能)的Web框架,而Uvicorn则是其推荐的ASGI服务器。两者可以配合使用以构建高效的API服务。安装命令如下: ```bash pip install fastapi uvicorn ``` - **Pydantic**: 数据验证和设置管理工具,能够帮助定义清晰的数据结构并自动处理输入校验。同样可通过`pip`安装: ```bash pip install pydantic ``` --- #### 核心代码实现 以下是一份基于上述技术栈的简单示例代码,展示如何使用Python开发一个基础的MCP服务。 ```python from fastapi import FastAPI, Body from pydantic import BaseModel import mcp_sdk_python as mcp app = FastAPI() class ModelContext(BaseModel): model_id: str context_data: dict @app.post("/execute/") async def execute_model(context: ModelContext = Body(...)): """ 接收来自客户端的请求,并执行相应的逻辑。 :param context: 包含模型ID和其他上下文数据的对象。 :return: 返回执行结果或错误信息。 """ try: # 调用MCP SDK中的功能 result = mcp.execute(model_id=context.model_id, data=context.context_data) return {"status": "success", "result": result} except Exception as e: return {"status": "error", "message": str(e)} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) ``` 此代码片段展示了如何通过FastAPI接收POST请求并将接收到的数据传递给MCP SDK进行进一步处理。 --- #### 测试与调试 完成基本的服务搭建后,可借助MCP Inspector工具对其进行测试和调试。假设您已经编写了一个名为`server.py`的脚本文件作为您的MCP服务入口点,则可以通过以下方式启动调试模式: ```bash npx @modelcontextprotocol/inspector python /path/to/server.py ``` 这一步骤允许开发者实时监控服务状态以及捕获潜在异常[^3]。 另外,在客户端侧也可以模拟发送请求至该服务端口来进行交互式测试。例如,创建一个简单的Client程序并与之建立连接[^4]: ```python from mcp.client.stdio_server_parameters import StdioServerParameters from mcp.client.mcp_client import McpClient def main(): server_params = StdioServerParameters( command="python", args=["/Users/ser/server.py"], env=None ) with McpClient(server_params) as client: response = client.send({"model_id": "test_model", "data": {}}) print(response) if __name__ == "__main__": main() ``` 以上即为完整的从环境配置到实际编码再到最终部署的一整套流程说明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值