使用 Python 开发 MCP Server 及 Inspector 工具详解
前言
模型上下文协议 (Model Context Protocol, MCP) 是一种新兴的协议,旨在让大型语言模型 (LLM) 更容易地与外部工具和服务集成。本文将介绍如何使用 Python 开发一个 MCP Server,并详细讲解如何使用 MCP Inspector 工具进行测试和调试。
什么是 MCP?
MCP 允许 LLM 通过定义明确的接口(资源、工具和提示)与外部世界进行交互。这使得 LLM 能够访问实时信息、执行复杂计算,以及与各种应用程序和服务集成。
MCP Server 架构
MCP Server 负责处理来自 LLM 的请求,执行相应的操作,并将结果返回给 LLM。一个 MCP Server 可以提供以下三种类型的能力:
- 资源 (Resources): 类似于文件,LLM 可以读取资源的内容,例如 API 响应或文件内容。
- 工具 (Tools): 类似于函数,LLM 可以调用工具来执行特定任务,例如获取天气预报或发送电子邮件。
- 提示 (Prompts): 预定义的模板,帮助用户完成特定任务。
使用 Python 开发 MCP Server
以下是一个使用 Python 开发简单天气服务器的示例,该示例基于官方教程:
1. 环境准备
- Python 3.10 或更高版本
- 安装
uv
和httpx
:
# MacOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- 创建项目并设置虚拟环境:
# MacOS/Linux
uv init weather
cd weather
uv venv
source .venv/bin/activate
# Windows
uv init weather
cd weather
uv venv
.venv\Scripts\activate
- 安装依赖:
uv add "mcp[cli]" httpx
- 创建服务器文件
weather.py
。
2. 代码实现 (weather.py)
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# 初始化 FastMCP 服务器
mcp = FastMCP("weather")
# 常量
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"
async def make_nws_request(url: str) -> dict[str, Any] | None:
"""向 NWS API 发起请求,并进行错误处理。"""
headers = {
"User-Agent": USER_AGENT,
"Accept": "application/geo+json"
}