MCP开发从入门到实战,少走99%弯路

发布于 2025-8-22 07:05
浏览
0收藏

模型上下文协议(Model Context Protocol,MCP)正在彻底改变我们与人工智能的交互方式,它让从数据科学家到业余爱好者的每个人都能轻松地为 AI 助手接入真实世界的数据,从而大幅提升其能力。举个例子,你可以像和同事聊天一样与 AI 对话,毫不费力地让它深入分析复杂数据集、发现隐藏模式、进行数值计算,甚至实时抓取网络上的市场趋势——整个过程自然流畅,就像普通对话一样。MCP 就像一个通用连接器,弥合了现代 AI 模型强大能力与动态变化的数据世界之间的鸿沟。无论是分析销售数据、预测趋势,还是探索实时洞察,MCP 都能把 AI 转变成一个强大的数据伙伴,它不仅能对话,更能真正理解并交互与你关心的重要信息。这个协议正在开启智能、上下文感知助手的新纪元,它们不再只是生成文本,而是能够推理、计算,并交付符合你需求的可执行结果。

什么是 MCP 服务器?

MCP 服务器就像一座桥梁,把 AI 模型(如 Claude 或 GPT)与您的数据或工具连接起来。它允许 AI 通过标准化协议访问数据集、执行计算或获取外部数据。你可以把它想象成 AI 的 USB-C 接口——它把数据科学的工作流与 AI 连接,使其功能远超文本生成。

对于数据科学家来说,MCP 服务器可以:

  • 读取并总结数据集(例如 CSV 文件)。
  • 计算统计量(如均值、中位数或标准差)。
  • 从 API 获取实时数据(如股票价格或天气)。
  • 基于数据生成洞察或可视化结果。

我们将在本文创建一个基于 Python 的 MCP 服务器,它可以:

  • 读取包含销售数据的 CSV 文件。
  • 提供计算统计量的工具(均值、中位数、标准差)。
  • 使用 Alpha Vantage API 获取实时股票价格。
  • 连接到 Claude Desktop,让你能与数据进行对话。

以下是高层次的工作流图:

MCP开发从入门到实战,少走99%弯路-AI.x社区

设置开发环境

步骤 1:安装 Python

确保已安装 Python 3.10 或更高版本。检查方式:

python --version

步骤 2:安装 uv

uv 是一个轻量级的 Python 包管理器。安装方法:

Mac/Linux

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

安装完成后,重启终端以确保 ​​uv​​ 命令可用。

步骤 3:创建项目目录

创建一个项目文件夹,并设置虚拟环境:

mkdir data_science_mcp
cd data_science_mcp
uv init data_science_mcp
uv venv
source .venv/bin/activate  # Mac/Linux
.venv\Scripts\activate     # Windows

步骤 4:安装依赖

创建一个 ​​requirements.txt​​ 文件,列出依赖:

mcp[cli]>=1.4.0
pandas>=2.0.0
httpx>=0.23.0
python-dotenv>=1.0.0

安装依赖:

uv pip install -r requirements.txt

步骤 5:获取 Alpha Vantage API Key

在 Alpha Vantage 注册并获取免费的 API key(每天 25 次请求)。将其保存到项目根目录下的 ​​.env​​ 文件:

ALPHA_VANTAGE_API_KEY=your_api_key_here

步骤 6:准备示例数据集

创建一个 ​​data​​​ 文件夹,并添加一个示例 CSV 文件 ​​sales_data.csv​​:

product,category,price,quantity_sold
Laptop,Electronics,999.99,50
Phone,Electronics,499.99,120
T-Shirt,Clothing,19.99,200
Jeans,Clothing,49.99,80

这个数据集包含了产品的销售数据,我们将用它来做分析。

步骤 7:安装 Claude Desktop

从 Anthropic 官网 下载并安装 Claude Desktop。它支持 macOS 和 Windows(Linux 用户可以构建自定义 MCP 客户端)。

环境准备完成!

项目结构应如下

data_science_mcp/
├── .venv/
├── data/
│   └── sales_data.csv
├── .env
├── requirements.txt

构建 MCP 服务器

接下来我们来创建 MCP 服务器。我们将使用 FastMCP 库来定义数据分析和 API 调用的工具。

步骤 1:创建服务器文件

在项目根目录下创建 ​​server.py​​ 文件,写入以下代码:

import pandas as pd
import httpx
from mcp.server.fastmcp import FastMCP
from dotenv import load_dotenv
import os


# 加载环境变量
load_dotenv()


# 初始化 MCP 服务器
mcp = FastMCP("data_science_server")


# 加载示例数据集
DATA_PATH = "data/sales_data.csv"
df = pd.read_csv(DATA_PATH)


# 工具 1:获取数据集摘要
@mcp.tool()
def summarize_dataset() -> str:
    """总结数据集:行数、列数和列名。"""
    rows, cols = df.shape
    columns = ", ".join(df.columns)
    return f"Dataset has {rows} rows and {cols} columns. Columns: {columns}"


# 工具 2:计算列均值
@mcp.tool()
def compute_mean(column: str) -> float:
    """计算数值列的均值。"""
    if column not in df.columns:
        return f"Error: Column '{column}' not found."
    if not pd.api.types.is_numeric_dtype(df[column]):
        return f"Error: Column '{column}' is not numeric."
    return float(df[column].mean())


# 工具 3:计算列中位数
@mcp.tool()
def compute_median(column: str) -> float:
    """计算数值列的中位数。"""
    if column not in df.columns:
        return f"Error: Column '{column}' not found."
    if not pd.api.types.is_numeric_dtype(df[column]):
        return f"Error: Column '{column}' is not numeric."
    return float(df[column].median())


# 工具 4:计算列标准差
@mcp.tool()
def compute_std(column: str) -> float:
    """计算数值列的标准差。"""
    if column not in df.columns:
        return f"Error: Column '{column}' not found."
    if not pd.api.types.is_numeric_dtype(df[column]):
        return f"Error: Column '{column}' is not numeric."
    return float(df[column].std())


# 工具 5:获取股票价格
@mcp.tool()
async def get_stock_price(symbol: str) -> str:
    """获取指定股票代码的最新价格。"""
    api_key = os.getenv("ALPHA_VANTAGE_API_KEY")
    url = f"https://www.alphavantage.co/query?functinotallow=TIME_SERIES_INTRADAY&symbol={symbol}&interval=5min&apikey={api_key}"
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url)
            response.raise_for_status()
            data = response.json()
            if "Time Series (5min)" not in data:
                return f"Error: No data found for symbol '{symbol}'."
            latest_time = list(data["Time Series (5min)"].keys())[0]
            price = data["Time Series (5min)"][latest_time]["4. close"]
            return f"Latest price for {symbol}: ${price}"
        except httpx.HTTPError:
            return f"Error: Failed to fetch stock price for '{symbol}'."


# 运行服务器
if __name__ == "__main__":
    mcp.run(transport="stdio")

代码解释

  • 导入:使用 pandas 处理数据,httpx 调用 API,FastMCP 创建 MCP 服务器,dotenv 管理环境变量。
  • 服务器初始化:FastMCP("data_science_server")创建一个名为 “data_science_server” 的服务器。
  • 加载数据集:读取 sales_data.csv 到 Pandas DataFrame。
  • 工具:

summarize_dataset:返回行数、列数和列名。

compute_mean / compute_median / compute_std:计算数值列的基本统计量(如价格或销量)。

get_stock_price:异步获取实时股票价格(Alpha Vantage API)。

  • 运行服务器:mcp.run(transport="stdio")启动服务器(STDIO 模式),适合本地与 Claude Desktop 测试。

步骤 2:配置 Claude Desktop

要将服务器连接到 Claude Desktop:

  1. 找到 Claude Desktop 的配置文件 claude_desktop_config.json(路径见官方文档)。
  2. 添加服务器配置:

{
  "mcpServers": {
    "data_science_server": {
      "command": "/path/to/your/venv/bin/python",
      "args": ["/path/to/data_science_mcp/server.py"]
    }
  }
}

将 ​​/path/to/your/venv/bin/python​​​ 和 ​​/path/to/data_science_mcp/server.py​​ 替换为你本地的实际路径。

步骤 3:测试服务器

运行服务器:

uv run python server.py

打开 Claude Desktop。你应该能在可用工具中看到该服务器。如果显示绿色指示符(🟢),说明连接成功。

本文转载自​​​​​​​PyTorch研习社​​​,作者:南七无名士


收藏
回复
举报
回复
相关推荐