一篇文章带你了解MCP以及5分钟手动实现简单MCP Server
MCP协议:AI与外部数据的桥梁 MCP(模型上下文协议)是Anthropic推出的标准化协议,旨在解决AI模型与外部数据源和工具的连接问题。其架构包含MCP主机、客户端和服务器,通过资源(静态/动态数据)、工具(功能插件)和提示词(任务模板)三大核心概念,实现AI与本地/远程资源的交互。文中演示了使用Python SDK快速搭建MCPServer的过程,包括环境配置、工具注册及连接测试,展示了如
一、为什么要用MCP
MCP 主要是为了解决目前 AI 模型因数据孤岛限制,无法充分发挥潜力的难题。MCP 可以让 AI 应用能够安全地访问和操作本地及远程数据,为 AI 应用提供了连接万物的接口。你可以理解为一个通用接口,类似USB接口。
二、理解MCP的架构
MCP(Model Context Protocol,模型上下文协议)是一种由Anthropic公司于2024年11月推出的标准开放协议,旨在解决大型语言模型(LLM)与外部数据源和工具之间的连接问题。MCP的提出为AI应用提供了标准化的接口,使得AI模型能够无缝地与各种外部工具(如数据库、API、文件系统等)进行交互,从而实现“即插即用”的能力。
MCP 采用的是经典的客户端 - 服务器架构,其中核心概念包括:
-
MCP 主机(MCP Hosts):发起请求的 LLM 应用程序(例如 Claude Desktop、IDE 或 AI 工具)。
-
MCP 客户端(MCP Clients):在主机程序内部且与 MCP server 保持 1:1 的连接。
-
MCP 服务器(MCP Servers):为 MCP client 提供上下文、工具和 prompt 信息。
-
本地资源(Local Resources):本地计算机中可供 MCP server 安全访问的资源(例如日志文件、数据库)。
-
远程资源(Remote Resources):MCP server 可以连接到的远程资源(例如通过 API)。

MCP 的核心遵循客户端-服务器架构
三、理解MCP Server 核心概念
MCP Server 相对比较独立,可以独立开发,独立部署、远程部署、本地部署,其中有三个核心概念:
3.1 Resources(资源)
像 “数据库” 或 “文件柜”,存着静态数据(如日志、配置)或半动态数据(如股价)。AI 需要时自己 “翻找” 读取,比如查日志找问题,数据更新时会主动通知 AI 来取新内容。
3.2 Tools(工具)
是 AI 能调用的 “功能插件”,比如查天气、算数学题的接口。但得用户允许才能用,AI 根据任务需求挑合适的工具,比如想查天气就调用天气 API 工具等。
3.3 Prompts(提示词)
是 “任务模板”,告诉 AI 该干啥(如 “提炼这段话”“翻译成英文”)。用户或开发者提前写好模板,AI 按模板规范处理内容,让输出更符合预期。
四、动手实现一个简单的MCP Server(Tools)
MCP Server 官方给出了两种语言的 SDK,分别是 NodeJS 以及 Python。我们就用 Python SDK,为大家做一下演示。
4.1 安装 uv && 初始化项目
pip install uv==0.6.14

可以在终端或命令提示符中输入uv version或uv --version,显示当前安装的 uv 版本号
接下来,我们使用 uv 来初始化项目。
uv init <你的项目名> 此时会出现如下打印: Initialized project `studymcp` at `/Users/xxx/IdeaProjects/demo/studyMcp`
表示初始化成功,同时会自动创建出一个如下图所示的 studyMcp 文件夹,里面主要包含了一个测试文件 main.py,项目包管理文件 pyproject.toml 以及 README.md。

4.2 安装 mcp 包
之后进入到 studyMcp 文件夹,执行如下命令安装 mcp 包。
uv add "mcp[cli]"

uv add "mcp[cli]"是使用 uv(Python 包管理工具 )安装包的命令 。uv add表示执行安装操作 ,mcp是要安装的包名 ,方括号里的cli代表安装 mcp 包的命令行界面(CLI )可选依赖 。安装后就能使用 mcp 的命令行功能。
此时,uv 会创建出一个 .venv 虚拟环境,并自动安装一堆依赖。

4.3 MCP Server 代码(注册工具)
完成安装后,创建一个 server.py 文件(需要删除main.py,因为studyMcp文件夹只能有一个 .py 文件),开始编写 MCP Server 代码。

使用 Tool 能力:
MCP Server 的 Python SDK,分为 FastMCP SDK 和 Low-Lever SDK 两种。FastMCP 是在 Low-Level 的基础上又做了一层封装,操作起来都更加简单,容易上手。因此我们使用 FastMCP。
from mcp.server.fastmcp import FastMCP
# Create an MCP server
mcp = FastMCP("studyMcp")
# Add an get score tool
@mcp.tool()
def get_rank_by_name(name: str) -> str:
"""根据员工的姓名获取该员工的期末评级"""
if name == "张三":
return "name: 张三 期末评级: S+"
elif name == "李四":
return "name: 李四 期末评级: A-"
else:
return "未搜到该员工的期末评级"
代码在开头引用了 FastMCP 包,之后在第 4 行创建了一个 MCP Server。 之后通过在第 7 行使用 @mcp.tool() 注解向 MCP Server 注册工具,被修饰的 get_rank_by_name 函数即为该工具的具体实现。 一个带有 Tool 的 MCP Server。
在Cursor的MCP配置中配置该MCP server。

{
"mcpServers": {
"studyMcp": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/Users/xx/IdeaProjects/demo/studyMcp",
"mcp",
"run",
"/Users/xx/IdeaProjects/demo/studyMcp/server.py"
]
}
}
}
//注意,把实际代码路径写成你自己的
只要是左上角的小点是绿色的,就说明连接成功了

效果验证:

测试MCP Server

测试MCP Server
可以看到,大模型给出了正确答案,说明测试通过了。
这是使用MCP Server中 Tool 能力,下一篇文章讲一下MCP Server 中 Resource 和Prompts 的能力。
更多推荐



所有评论(0)