MCP 服务简介
MCP(Model Context Protocol,模型上下文协议)是一个开放协议,用于标准化 AI 应用程序(如大语言模型 LLM)如何与外部数据源、工具和服务进行交互。它类似于 AI 领域的“USB-C 接口”,允许客户端(如 Claude Desktop、VS Code 或自定义 AI 工具)通过统一方式连接到各种 MCP 服务器,实现工具调用、资源访问和提示注入等功能。MCP 采用客户端-服务器架构,支持 JSON-RPC 2.0 通信,通常通过 stdio(标准输入输出)或网络方式实现。
MCP 服务(MCP Server)是核心组件,它暴露工具(Tools)、资源(Resources)和提示(Prompts),供客户端调用。构建 MCP 服务可以帮助 AI 模型访问本地文件、网络数据、API 等外部资源,而无需碎片化集成。
下面,我将基于常见开源实践和官方文档,逐步说明 MCP 服务的构建和使用。示例主要使用 Python(最流行语言),并参考 Spring AI(Java 集成)。如果您使用其他语言(如 C#、TypeScript),可以参考 Microsoft Learn 或官方 SDK。
MCP 服务构建步骤
构建 MCP 服务通常涉及环境准备、代码编写、测试和部署。以下是保姆级教程,假设您使用 Python 环境(推荐 uv 或 pip 管理依赖)。
1. 环境准备
- 安装依赖管理工具:推荐使用
uv(更快、更现代)。在终端运行:
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS/Linux
# Windows: 使用 PowerShell 执行 irm https://astral.sh/uv/install.ps1 | iex
- 初始化项目:
uv init mcp-server # 创建项目目录
cd mcp-server
uv venv # 创建虚拟环境
source .venv/bin/activate # 激活(Windows: .venv\Scripts\activate)
uv add "mcp[cli]" httpx aiohttp asyncio # 添加核心 MCP SDK 和常用库(如 httpx 用于 API 调用)
- 创建服务器文件:新建
server.py文件。
2. 编写 MCP 服务器代码
MCP 服务器核心是定义工具(Tools)。以下是一个简单示例:构建一个“天气查询”MCP 服务,使用美国国家气象局 API 获取天气数据。
在 server.py 中写入以下代码(基于 FastMCP 类,自动生成工具定义):
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# 初始化 MCP 服务器
mcp = FastMCP("weather-app") # 服务器名称
# 常量
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"
# 定义工具:获取指定位置的天气警报
@mcp.tool()
def get_weather_alerts(latitude: float, longitude: float) -> str:
"""获取指定经纬度的天气警报。
Args:
latitude: 纬度
longitude: 经度
Returns:
天气警报描述
"""
url = f"{NWS_API_BASE}/alerts/active?point={latitude},{longitude}"
headers = {"User-Agent": USER_AGENT}
response = httpx.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
alerts = data.get("features", [])
if alerts:
return alerts[0]["properties"]["headline"]
return "无活跃警报"
return "查询失败"
# 运行服务器(stdio 模式,本地进程通信)
if __name__ == "__main__":
mcp.run(transport="stdio") # 或 "sse" 用于网络传输
- 解释:
@mcp.tool()装饰器使用 Python 类型提示和 docstring 自动生成工具 schema(JSON 定义),供客户端发现和调用。- 支持三种功能:Tools(可调用函数)、Resources(静态数据,如文件内容)、Prompts(预设提示模板)。
- 对于更复杂场景(如股票查询),可以集成
yfinance库添加另一个工具。
3. 构建和打包
- 运行测试:
uv run python server.py
这会启动 stdio 服务器,等待客户端连接。
- 打包发布(可选):
- 对于 Python:使用
setup.py打包为 wheel,或直接分享脚本。 - 对于 Java(Spring AI 集成):克隆示例仓库
git clone https://github.com/yuyuanweb/mcp-mianshiya-server,然后mvn clean package构建 JAR 包。 - 对于 NuGet(.NET):参考 Microsoft Learn,使用 C# SDK 创建最小服务器并发布。
4. 测试 MCP 服务器
- 使用官方 Inspector 工具(调试界面):
- 安装:
pip install mcp[cli]或从 GitHub 下载。 - 运行:
mcp-inspector --server server.py(连接您的服务器,测试工具调用)。 - 预期输出:工具列表显示
get_weather_alerts,调用后返回天气数据。
常见扩展
- 集成大模型:如 DeepSeek、Ollama 或 vLLM。示例代码:
from mcp.client.stdio import stdio_client
from mcp import ClientSession, StdioServerParameters
import asyncio
# ... (初始化 OpenAI 或其他模型)
async def process_query(query: str) -> str:
# 使用 LLM 识别工具调用
messages = [{"role": "user", "content": query}]
# 调用 MCP 工具
# ...
- 自定义工具示例:
- 文件读取:
@mcp.tool() def read_file(path: str) -> str: return open(path).read() - 搜索:集成 DuckDuckGo API 实现网络搜索。
MCP 服务使用步骤
一旦构建好 MCP 服务,您需要一个 MCP 客户端来连接和调用它。客户端可以是现成工具(如 Claude、Cline)或自定义。
1. 使用现成客户端
- Claude Desktop 或 Cline(推荐新手):
- 将服务器添加到客户端:复制
server.py到客户端目录,或配置路径。 - 示例:在 Cline 中运行
python server.py,然后查询“北京的天气如何?”——客户端会自动调用工具。 - VS Code 或 GitHub Copilot:
- 启用 MCP 扩展,添加服务器路径。测试:输入“生成随机数”,服务器响应。
- Cherry Studio(AI 客户端):
- 克隆示例仓库,运行 JAR 包,连接 MCP 服务进行面试模拟。
2. 自定义客户端使用
- Python 示例(连接服务器并调用工具):
import asyncio
from mcp.client.stdio import stdio_client
from mcp import ClientSession, StdioServerParameters
server_params = StdioServerParameters(
command="uv", # 或 "python"
args=["run", "server.py"]
)
async def main():
async with stdio_client(server_params) as (stdio, write):
async with ClientSession(stdio, write) as session:
await session.initialize()
# 列出工具
tools = await session.list_tools()
print(tools)
# 调用工具
result = await session.call_tool("get_weather_alerts", {"latitude": 39.9, "longitude": 116.4})
print(result)
asyncio.run(main())
- 集成到 AI 对话:使用 OpenAI API 的 function calling,让 LLM 自动决定何时调用 MCP 工具。
3. 部署和安全
- 本地运行:stdio 模式,适合开发。
- 远程部署:使用 SSE(Server-Sent Events)传输,部署到云服务器。
- 安全提示:使用环境变量存储 API 密钥(如
.env文件),避免硬编码。MCP 支持权限控制,只暴露必要工具。
常见问题与资源
- 调试:如果工具未调用,检查 VS Code 工具列表或日志。确保版本兼容(MCP 1.0+)。
- 性能:stdio 适合本地,网络模式用于分布式。
- 进一步学习:
- 官方文档:https://modelcontextprotocol.io/ (英文),中文站:https://mcpcn.com/docs
- GitHub 示例:https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide
- Java 教程:https://www.cnblogs.com/yupi/p/18814281
- .NET 快速入门:https://learn.microsoft.com/zh-cn/dotnet/ai/quickstarts/build-mcp-server
通过以上步骤,您可以快速构建一个功能性的 MCP 服务,并集成到 AI 工作流中。如果需要特定语言或工具的更多细节,请提供更多上下文!