首页 / AI Agent开发 / MCP 服务器开发实战:使用 Python 快速构建自定义 AI Agent 工具 7 次阅读
MCP 服务器开发实战:使用 Python 快速构建自定义 AI Agent 工具
AI Agent 开发

MCP 服务器开发实战:使用 Python 快速构建自定义 AI Agent 工具

掌握 Model Context Protocol 开放协议,从零构建标准化 AI Agent 工具,实现与外部系统、API 和数据源的无缝连接

2026 年 3 月 19 日 · 约 12 分钟阅读

为什么需要 MCP 协议?

如果你正在开发 AI Agent 应用,是否遇到过这些问题:

  • 每个外部 API 都要写一套定制化的集成代码,重复劳动严重
  • 工具调用缺乏统一标准,不同 Agent 框架之间无法复用
  • 随着工具数量增加,维护成本呈指数级增长
  • AI 模型无法准确理解工具的参数和使用方式

Model Context Protocol(MCP) 正是为解决这些问题而生。作为 2026 年 AI Agent 领域的开放标准,MCP 提供了一种统一的协议,让 AI Agent 能够标准化地发现和调用外部工具。

本教程将带你从零开始,使用 Python 构建一个符合 MCP 标准的服务器,实现一个可以查询天气和股票的 AI Agent 工具系统。

准备工作:环境搭建

在开始之前,我们需要准备以下开发环境:

🐍
Python 3.10+
核心开发语言,支持最新异步特性
uv
超快速的 Python 包管理器,比 pip 快 10-100 倍
🚀
FastMCP
FalkorDB 出品的高性能 MCP SDK,简化开发流程
🌐
httpx
异步 HTTP 客户端,用于调用外部 API

完整实战步骤

01
初始化项目并安装依赖

首先创建项目目录并使用 uv 初始化:

mkdir mcp-weather-stock-server
cd mcp-weather-stock-server
uv init
uv add fastmcp httpx python-dotenv

pyproject.toml 中确保配置正确的入口:

[project.scripts]
mcp-server = "mcp_server:main"
02
创建 MCP 服务器基础结构

创建 mcp_server.py 文件,定义 MCP 服务器的核心框架:

from fastmcp import FastMCP
from typing import Optional
import httpx
import asyncio

# 初始化 MCP 服务器
mcp = FastMCP(
    name="weather-stock-server",
    instructions="提供天气和股票查询功能的 MCP 服务器"
)

@mcp.resource("config://server")
def get_config() -> str:
    """返回服务器配置信息"""
    return "MCP 服务器 v1.0 - 支持天气和股票查询"

if __name__ == "__main__":
    mcp.run()
MCP 服务器基础架构图
03
实现天气查询工具

添加第一个 MCP 工具——天气查询功能。我们使用 OpenWeatherMap API 作为示例:

from pydantic import BaseModel, Field

class WeatherInput(BaseModel):
    city: str = Field(description="城市名称,如'Beijing'或'Shanghai'")
    units: str = Field(default="metric", description="温度单位:metric(摄氏) 或 imperial(华氏)")

@mcp.tool()
async def get_weather(city: str, units: str = "metric") -> dict:
    """
    查询指定城市的当前天气状况

    Args:
        city: 城市名称
        units: 温度单位,metric 为摄氏度,imperial 为华氏度

    Returns:
        包含温度、湿度、天气描述的字典
    """
    api_key = os.getenv("OPENWEATHER_API_KEY")
    base_url = "https://api.openweathermap.org/data/2.5/weather"

    async with httpx.AsyncClient() as client:
        response = await client.get(
            base_url,
            params={"q": city, "appid": api_key, "units": units}
        )
        data = response.json()

        return {
            "city": data["name"],
            "temperature": data["main"]["temp"],
            "humidity": data["main"]["humidity"],
            "description": data["weather"][0]["description"]
        }
04
实现股票查询工具

继续添加股票实时数据查询工具,使用 Alpha Vantage API:

class StockInput(BaseModel):
    symbol: str = Field(description="股票代码,如'AAPL'或'GOOGL'")

@mcp.tool()
async def get_stock_price(symbol: str) -> dict:
    """
    查询指定股票的实时价格和涨跌情况

    Args:
        symbol: 股票代码

    Returns:
        包含当前价格、涨跌幅、交易量的字典
    """
    api_key = os.getenv("ALPHA_VANTAGE_API_KEY")
    base_url = "https://www.alphavantage.co/query"

    async with httpx.AsyncClient() as client:
        response = await client.get(
            base_url,
            params={
                "function": "GLOBAL_QUOTE",
                "symbol": symbol,
                "apikey": api_key
            }
        )
        data = response.json()
        quote = data.get("Global Quote", {})

        return {
            "symbol": symbol,
            "price": float(quote.get("05. price", 0)),
            "change": float(quote.get("09. change", 0)),
            "change_percent": quote.get("10. change percent", "0%"),
            "volume": quote.get("06. volume", "N/A")
        }
MCP 工具调用流程图
05
添加组合查询工具

MCP 的强大之处在于可以组合多个工具。创建一个同时查询天气和股票的高级工具:

@mcp.tool()
async def get_investment_weather_report(
    stock_symbol: str,
    hq_city: str = "Cupertino"
) -> dict:
    """
    生成投资分析报告:同时获取股票价格和总部天气

    Args:
        stock_symbol: 股票代码
        hq_city: 公司总部所在城市

    Returns:
        包含股票数据和天气信息的综合报告
    """
    # 并行执行两个独立查询,提升响应速度
    stock_data, weather_data = await asyncio.gather(
        get_stock_price(stock_symbol),
        get_weather(hq_city)
    )

    # 生成投资心情指数(示例逻辑)
    sentiment = "中性"
    if stock_data["change"] > 0 and "晴" in weather_data["description"]:
        sentiment = "积极"
    elif stock_data["change"] < 0 and "雨" in weather_data["description"]:
        sentiment = "消极"

    return {
        "stock": stock_data,
        "weather": weather_data,
        "investment_sentiment": sentiment
    }
06
配置并启动服务器

创建 .env 文件存储 API 密钥:

OPENWEATHER_API_KEY=your_openweathermap_key
ALPHA_VANTAGE_API_KEY=your_alphavantage_key

使用以下命令启动 MCP 服务器:

# 方式 1: 直接运行 Python 脚本
python mcp_server.py

# 方式 2: 使用 uv 运行
uv run python mcp_server.py

服务器启动后,会输出 SSE 端点 URL,例如 http://localhost:8000/sse

MCP 服务器启动日志截图
07
在 Claude Code 中配置 MCP 服务器

打开 Claude Code 的设置,添加自定义 MCP 服务器配置。编辑 ~/.claude/settings.json

{
  "mcpServers": {
    "weather-stock": {
      "command": "uv",
      "args": ["run", "python", "mcp_server.py"],
      "cwd": "/path/to/your/mcp-weather-stock-server",
      "env": {
        "OPENWEATHER_API_KEY": "your_key",
        "ALPHA_VANTAGE_API_KEY": "your_key"
      }
    }
  }
}

重启 Claude Code 后,新工具将自动可用。你可以测试:

查询 AAPL 股票的当前价格
北京今天天气怎么样?
生成一份苹果公司的投资天气报告

常见问题(FAQ)

MCP 协议相比直接调用 API 有什么优势?
MCP 提供了标准化的工具发现机制和统一的调用接口。AI 模型可以自动理解工具参数、返回类型,无需为每个 API 编写定制化代码。同时,MCP 服务器可以复用,支持多个 Agent 框架(Claude Code、Cursor、Google ADK 等)。
如何调试 MCP 服务器的问题?
FastMCP 内置了详细的日志功能。启动时添加 --log-level debug 参数可以看到完整的请求和响应。也可以使用 MCP Inspector 工具进行可视化调试。
MCP 服务器可以部署到生产环境吗?
可以。推荐使用 Docker 容器化部署,或使用 Cloudflare Workers、Fly.io 等边缘计算平台。注意配置好认证机制,避免 API 密钥泄露。
如何扩展更多工具类型?
遵循相同的模式:定义输入模型(Pydantic)、编写工具函数、使用 @mcp.tool() 装饰器。关键是提供清晰的文档字符串,帮助 AI 理解工具用途。

总结与进阶

通过本教程,你已经掌握了:

  • MCP 协议的核心概念和应用场景
  • 使用 FastMCP SDK 快速搭建 MCP 服务器
  • 实现天气查询、股票查询等实用工具
  • 在 Claude Code 中配置和使用自定义 MCP 服务器
  • 并行查询、组合工具等进阶技巧

下一步行动:尝试将本教程的工具扩展为完整的金融分析 Agent,接入更多数据源(如财报、新闻),构建你自己的 AI 投资顾问系统。

选择栏目
今日简报 播客电台 实战教程 AI挣钱计划 关于我
栏目
全球AI日报国内AI日报全球金融日报国内金融日报全球大新闻日报国内大新闻日报Claude Code 玩法日报OpenClaw 动态日报GitHub 热门项目日报AI工具实战AI应用开发编程实战工作流自动化AI原理图解AI Agent开发AI变现案例库AI工具创收AI内容变现AI接单提效变现前沿研究
我的收藏