为什么需要 MCP 协议?
如果你正在开发 AI Agent 应用,是否遇到过这些问题:
- 每个外部 API 都要写一套定制化的集成代码,重复劳动严重
- 工具调用缺乏统一标准,不同 Agent 框架之间无法复用
- 随着工具数量增加,维护成本呈指数级增长
- AI 模型无法准确理解工具的参数和使用方式
Model Context Protocol(MCP) 正是为解决这些问题而生。作为 2026 年 AI Agent 领域的开放标准,MCP 提供了一种统一的协议,让 AI Agent 能够标准化地发现和调用外部工具。
本教程将带你从零开始,使用 Python 构建一个符合 MCP 标准的服务器,实现一个可以查询天气和股票的 AI Agent 工具系统。
准备工作:环境搭建
在开始之前,我们需要准备以下开发环境:
完整实战步骤
首先创建项目目录并使用 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"
创建 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 工具——天气查询功能。我们使用 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"]
}
继续添加股票实时数据查询工具,使用 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 的强大之处在于可以组合多个工具。创建一个同时查询天气和股票的高级工具:
@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
}
创建 .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
打开 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)
--log-level debug 参数可以看到完整的请求和响应。也可以使用 MCP Inspector 工具进行可视化调试。@mcp.tool() 装饰器。关键是提供清晰的文档字符串,帮助 AI 理解工具用途。总结与进阶
通过本教程,你已经掌握了:
- MCP 协议的核心概念和应用场景
- 使用 FastMCP SDK 快速搭建 MCP 服务器
- 实现天气查询、股票查询等实用工具
- 在 Claude Code 中配置和使用自定义 MCP 服务器
- 并行查询、组合工具等进阶技巧
下一步行动:尝试将本教程的工具扩展为完整的金融分析 Agent,接入更多数据源(如财报、新闻),构建你自己的 AI 投资顾问系统。