MCP入门,看完这篇就够了

MCP入门,看完这篇就够了
蔡坨坨转载请注明出处❤️
作者:测试蔡坨坨
原文链接:caituotuo.top/9cf8820a.html
你好,我是测试蔡坨坨。
最近在学习MCP,一开始也是一脸懵,文档一大堆,概念也挺抽象。但摸索了一圈之后,其实发现它并没有那么高冷,掌握了基本概念和用法,就能快速搭建出一套模块化的系统架构。
于是,顺手整理了一份极简入门
教程,分享给和我一样想上手但不知如何下手的朋友们。
1 什么是MCP?
1.1 MCP简介
MCP(Model Context Protocol,模型上下文协议)
MCP
是一个由 Anthropic
(Claude模型的公司)开源的标准化协议,让大模型
能够以统一的方式
连接和访问各种数据、工具和服务。
通过这种方式,可以拓展 LLM 的能力边界,可以将其视为一个通用的适配器,让 LLM 能够接入庞大的互联网资源网络,增强其功能并开启新的可能性。
1.2 MCP架构
MCP 官网:https://modelcontextprotocol.io/introduction
MCP 采用 客户端 - 服务器
模式运行,其中 MCP 宿主(例如:Claude 桌面应用、代码编辑器 Cursor、代码编辑插件 Cline …)可以连接到多个 MCP 服务器。每个服务器通过标准化协议暴露特定的功能,使 LLM 能够访问各种功能。MCP 就像 AI 应用程序的 USB-C 接口,为 AI 模型提供了一种标准化的方式来连接不同的数据源和工具。
MCP 中的三个角色:
- MCP 宿主:使用 MCP 连接各种资源的应用程序,例如:AI 助手、开发环境和专门的 AI 工具,一个宿主通常包含多个MCP客户端。
- MCP 客户端:宿主内部的组件,负责与各个MCP服务器建立直接连接。客户端和服务器保持 1:1 的连接关系。
- MCP 服务器:通过 MCP 框架提供特定功能的轻量级程序。这些服务器可以访问本地和远程资源。
MCP 的一些概念:
资源
资源是 MCP 中的基本元素,允许服务器向 LLM 暴露数据和内容。包括各种类型的信息,例如:文件内容、数据库记录、API 响应,甚至实时系统数据。资源设计为应用程序可控的,这意味着客户端应用程序可以决定如何以及何时使用它们。
MCP 支持两种类型的资源:
文本资源
:适用于源代码、配置文件、日志文件和其他文本数据二进制资源
:适用于图像、PDF、音频文件、视频文件和其他非文本格式
资源 URI
资源使用以下格式的 URI 进行标识:
1
[协议]://[主机]/[路径]
例如:
1
2
3file:///home/user/caituotuo.pdf # 文件
postgres://database/customers/schema # 数据库
screen://localhost/display
协议和路径结构由 MCP 服务器实现定义。服务器可以定义自己的自定义 URI 方案。
提示词
提示词通常是可重用的模板,用于指导 LLM 有效地与 MCP 服务器交互。
结构:
1
2
3
4
5
6
7
8
9
10
11{
name: string; // 提示词的唯一标识
description?: string;
arguments?: [
{
name: string; // 参数的唯一标识
description?: string;
required?: boolean;
}
]
}发现提示词
客户端可以通过 prompts/list 端点发现可用的提示词:
响应:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
prompts: [
{
name: "translate-into-chinese";
description: "将内容翻译成中文";
arguments: [
{
name: "content";
description: "需要翻译的内容";
required: true;
}
]
}
]
}
工具
工具使 LLM 能够通过 MCP 服务器执行操作。与主要提供数据的资源不同,工具设计用于执行计算并产生副作用。
工具的定义:
1
2
3
4
5
6
7
8
9
10{
name: string; // 工具的唯一标识
description?: string;
inputSchema?: [ // 工具参数 JSON Schema
{
type: object;
properties: { ... } // 工具特定的参数
}
]
}实现工具
传输层
传输层定义了 MCP 客户端和服务器之间的通信通道,促进消息和数据的交换。
消息格式:
JSON-RPC 2.0
内置两种传输类型:
- stdio:通过标准
输入/输出流
实现通信,例如:本地集成、命令行工具。 - SSE:服务器发送事件,通过 HTTP POST 请求实现服务器到客户端的流式传输,例如:需要服务器到客户端的流式传输、在受限网络中工作、实现简单更新。
- stdio:通过标准
2 Claude Desktop
最典型的 MCP 客户端就是 Claude Desktop
,它是 Anthropic 开发的 AI 助手,内置支持 MCP。
2.1 配置
按照以下步骤配置 Claude Desktop 以使用 MCP 服务器:
下载和安装
支持 macOS 和 Windows 版:
创建配置文件
打开 Claude 菜单并选择“设置”
导航到“开发者”选项卡,点击“编辑配置”
第一次会创建一个名为
claude_desktop_config.json
的配置文件:
添加服务器配置
编辑配置文件,添加 mcp 服务:
1
2
3
4
5
6
7
8
9
10
11
12{
"mcpServers": {
"filesystem": {
"command": "npx", // 这里用到了npx,需要确保计算机安装了Node.js
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/caihesheng/Desktop/myFiles/blog/source/_posts"
]
}
}
}确保路径指向有效的目录,并且可以添加多个目录。
重启 Claude
重启 Claude Desktop 以应用更改,可以看到运行中的 filesystem 服务:
点击 Claude Desktop 对话界面中的 Search and tools 图标夹可以查看 MCP 服务器提供的工具:
2.2 使用
首先让它列出所有在 _posts 文件下的所有文件:
1 | List all the files in my _posts folder. |
它会尝试调用 filesystem 服务的 list_allowed_directories
这个工具:
点击授权,Claude 会访问到我指定的目录,它能够成功地发现目录下的所有文件:
接着让它给出指定文件的内容:
1 | Show me the content of 8分钟搞懂Java中的各种锁.md |
可以看到它成功地调用 read_file
这个工具读取到文章内容,并对内容进行总结:
这样我们就成功地完成了 MCP 服务器的配置,并通过 Claude Desktop 验证了工具工作一切正常。
除此之外,MCP 官网还列出了许多可以用的服务,可以根据需要集成到自己的 MCP 客户端:
https://modelcontextprotocol.io/examples
同时,在 MCP 官方的 servers 仓库中也列出了目前市面上绝大多数的官网和三方支持的 mcp 服务:
https://github.com/modelcontextprotocol/servers
3 准备 UV 开发环境
macOS 和 Linux:
1 | curl -LsSf https://astral.sh/uv/install.sh | sh |
1 | downloading uv 0.7.11 aarch64-apple-darwin |
重启终端,运行 uv --version
查看是否安装成功:
4 MCP 服务器开发
开始构建你的第一个 MCP 服务器,这里用到了一个 Python 开发包 yfinance
基于雅虎财经的信息和数据来获取公司的概要信息和新闻。
它提供两个工具:
- get_summary:获取公司的概要信息
- get_new:获取公司的新闻
通过这个服务器,Claude 桌面应用将能够回答与公司财务信息和新闻相关的查询。
4.1 安装 Python SDK
1 | pip install mcp |
1 | pip install yfinance |
4.2 代码开发
1 | import yfinance as yf |
4.3 在 Claude 中测试 MCP 服务器
4.3.1 配置
1 | { |
配置完成后,重启 Claude,可以看到新配置的工具:
4.3.2 使用
5 MCP 客户端开发
MCP 客户端负责连接到 MCP 服务器。列出可用的资源和工具,并处理 LLM 与服务器之间的通信。构建 MCP 客户端涉及实现服务器连接、工具列表、工具使用和 LLM 集成等功能。
5.1 安装 Python SDK
1 | pip install mcp |
1 | pip install anthropic |
1 | pip install python-dotenv |
5.2 配置环境变量
.env 文件:
1 | ANTHROPIC_API_KEY= |
5.3 代码开发
1 | import asyncio |
5.4 运行 MCP 客户端服务
5.4.1 运行
运行命令:
1 | uv run mcp-client.py /Users/caihesheng/Desktop/myFiles/code/yahoo-finance/yahoo-finance.py |
可以看到成功运行了 MCP 服务器 yahoo-finance.py,并且获取了工具列表get_summary、get_news:
5.4.2 使用
进行提问,可以看到它会先去拉取工具列表(ListToolsRequest
),然后调用工具(CallToolRequest
):
基于工具调用的结果,大模型推理出最终答案:
6 MCP Inspector
MCP Inspector
是一个开发工具,允许我们通过交互式调用工具测试和检查 MCP 服务器。
它提供了一个用户界面,可以在其中测试所有 MCP 功能,包括资源、提示词和工具,查看可用资源及其内容,调试服务响应,并验证自己的实现是否按预期工作。
6.1 运行
Inspector 可以通过 npx 直接运行,无需安装:
1 | npx @modelcontextprotocol/inspector <command> <arg1> <arg2> |
1 | npx @modelcontextprotocol/inspector uv --directory /Users/caihesheng/Desktop/myFiles/code/yahoo-finance run yahoo-finance.py |
成功启动后,可以看到它运行在6274端口:
6.2 使用
浏览器访问:http://127.0.0.1:6274
点击 Connect 连接到 MCP 服务器: