这是用AI程序生成的图片。
这个故事是由多个AI助手帮忙写的。
搭建MCP服务器:第1部分 — 资源入门篇 模型上下文协议是什么?模型上下文协议(MCP,详情请参阅介绍)是一种标准化的方式,允许像Claude这样的大型语言模型(LLM)安全地与外部数据和功能进行交互。可以把它想象成一个抬头显示器或人工智能的USB端口——它提供了一个通用接口,让任何兼容MCP的大型语言模型都能连接到你的数据和工具上。
MCP 提供了一个集中的协议,简化了即插即用的 AI 服务开发。与其他集成方法不同,这些方法可能需要为每个 AI 模型进行自定义实现,MCP 提供了一种标准化的方法,可以适用于各种不同的大语言模型。
没有像MCP这样的接口,LLM们只能使用它们自带的功能和训练数据。有了MCP,它们就能变得更强,比如做更多事情。
- 读取文件和数据库
- 调用API
- 使用本地工具
- 等等
所有这些都在用户同意下进行,既强大又安全,保证了用户体验。
在这个教程里,我们将从[MCP: 资源](MCP: 资源)的基础内容开始。
MCP资源是什么?资源是MCP用来向LLMs提供只读数据的一种方法。资源可以是任何可读的内容,例如:
- 您计算机上的文件夹和文件
- 数据库记录
- API 返回的数据
- 应用数据
- 系统详情
每个资源包括:
- 一个唯一的URI地址(如
file:///example.txt
或database://users/123
) - 显示名
- 可选的元数据信息(描述、MIME类型)
- 内容(文本或二进制内容)
资源让你能够以规范的方式将数据展示给大模型。这里有一些实际的例子:
文档站 // 公开公司的文档如下
"docs://api/reference" -> API 参考
"docs://guides/getting-started" -> 入门指南
日志分析系统用户:“你能解释一下我们的API限流政策吗?”
小助手:“让我查一下文档……根据文档说明,每分钟最多允许100个请求。”
"logs://system/today" -> 今日的系统日志
"logs://errors/recent" -> 最近的错误信息
客户数据服务器用户:“今天我们系统出啥问题了?”
AI助理:“看一下今天的日志,我发现今天出了三个严重错误…”
"customers://profiles/summary" -> 客户概况
"customers://feedback/recent" -> 最近的反馈
开始吧用户:“最近客户反馈的整体情绪怎么样?”
AI助理:“最近收到的反馈大部分是正面的,但...”
首先,创建一个新的目录并启动一个TypeScript项目:
创建一个名为hello-mcp的目录
进入hello-mcp目录
使用npm初始化项目并自动确认
安装@modelcontextprotocol/sdk依赖包
安装typescript和@types/node作为开发依赖
在你喜欢的IDE中打开目录。
让我们打开 package.json
文件并做一些修改。删除那行写有 "main": "index.js"
的代码。在原来的位置添加一行,内容为 "type": "module"
。最后,在 "scripts"
下面添加一个名为 "build"
的脚本,并设置其值为 "tsc"
。
{
"name": "hello-mcp",
"version": "1.0.0",
"type": "module",
"scripts": {
"build": "tsc",
"test": "echo \"Error: no test specified\" && exit 1" // 测试:未指定任何测试,将会报错并退出
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "", // 描述:暂时没有描述信息
"dependencies": {
"@modelcontextprotocol/sdk": "^1.1.0"
},
"devDependencies": {
"@types/node": "^22.10.5",
"typescript": "^5.7.2"
}
}
最后,新建一个名为 tsconfig.json
的文件,并添加如下所示的代码:
{
"compilerOptions": {
"目标版本": "ES2022",
"模块类型": "Node16",
"模块解析方式": "Node16",
"输出目录": "./build",
"源代码根目录": "./src",
"严格模式": "启用",
"启用 esModule 互操作性": true,
"跳过库检查": true,
"强制文件名大小写一致性": true
},
"包含路径": ["src/**/*"]
}
环境现在已经准备好了,现在可以开始写代码了。
让我们开始创建你的第一个资源站吧在 src/index.ts
文件中创建一个新的索引文件(index.ts),并添加以下代码:
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
ListResourcesRequestSchema,
ReadResourceRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
// 初始化服务器资源能力
const server = new Server(
{
name: "hello-mcp",
version: "1.0.0",
},
{
capabilities: {
resources: {}, // 启用资源
},
}
);
// 当客户端请求时列出可用资源
server.setRequestHandler(ListResourcesRequestSchema, async () => {
return {
resources: [
{
uri: "hello://world",
name: "Hello World 消息资源",
description: "简单的问候",
mimeType: "text/plain",
},
],
};
});
// 当客户端请求时返回资源内容
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
if (request.params.uri === "hello://world") {
return {
contents: [
{
uri: "hello://world",
text: "你好,世界!这是我的第一个MCP资源。",
},
],
};
}
throw new Error("资源不存在");
});
// 使用标准输入输出传输启动服务器
const transport = new StdioServerTransport();
await server.connect(transport);
console.info('{"jsonrpc": "2.0", "method": "log", "params": { "message": "服务器正在运行..." }}');
读懂代码
这个简单的服务器展示了MCP资源的关键点。
服务器设置- 我们创建一个名为 [name] 的版本 [version] 的服务器实例
- 我们启用资源功能
- 其他功能,比如提示和工具,我们会稍后详细介绍
ListResourcesRequestSchema
处理器告诉客户端有哪些可用资源- 每个资源项都有
uri
,name
,以及可选的description
/mimeType
- 客户端用这个来发现可用资源
ReadResourceRequestSchema
处理器返回资源内容- 它会根据给定的URI来获取对应的内容。
- 内容包含URI和实际的数据。
- 我们使用stdio传输方式进行本地通信
- 这在桌面MCP实现中是标准做法
有几种方法可以测试你的MCP服务器。例如,可以使用Claude Desktop,还可以在开发时使用MCP Inspector工具来测试所有功能。
设置 Claude 桌面设置Claude Desktop中的MCP服务器端的步骤如下:
还没装桌面版Claude吗?那就赶紧装上吧。
2: 打开Claude,然后进入设置菜单:
进入“开发工具”选项卡。
4: 你将看到如下当前设置的MCP服务器列表,
点击“编辑配置”按钮,以在您的文件资源管理器中显示配置文件:
6: 打开配置文件,在你的默认编辑器中以便添加你的MCP服务器配置。
7: 在你的配置里添加以下内容:
{
"mcpServers": {
"hello-mcp": {
"command": "command",
"args": ["/你的绝对路径/到/hello-mcp/build/index.js"]
}
}
}
8: 构建并运行程序:
npx tsc
此命令用于运行TypeScript编译器,将TypeScript代码编译成JavaScript代码。
9: 重启克劳德桌面版
10: 当你开始和Claude聊天时,选择MCP资源连接选项:
Claude
11: 然后选择你的资源:
您的资源会以附件的形式出现:
MCP Inspector(MCP检查器)(https://github.com/modelcontextprotocol/inspector)是一个开发工具,这个工具能帮助你测试所有MCP的功能。
检查器提供了一个用户界面,可以在这里。
- 测试MCP的所有功能(资源、提示和工具)
- 查看可用资源及其内容
- 调试服务器的响应
- 验证您的实现是否按预期运作
你可以试试比如使用MCP Inspector来测试新服务器。
1: 打开Inspector
运行 npx @modelcontextprotocol/inspector node build/index.js
命令
点击左侧“环境变量”列表中的“配置”按钮
3: 首先你应该会看到“资源”标签页,在这里你可以查看你的问候语资源。点击“列出资源”按钮,你可以查看自己创建的资源。
当你点击问候资源后,可以看到它的内容
你会看到我们设计的那些相同的回复:
- 资源列表中显示我们的资源名称叫做:“Hello World Message”
- 读取该资源会返回:“Hello, World! This is my first MCP resource。”
在第二部分,我们将要做的事是:(点击这里阅读)。
- 使用资源模板来添加动态资源
- 通过将代码拆分到单独的文件中来更好地组织代码
- 学习如何高效地管理多个资源
- 学习高级资源模式和最佳实践方法
接下来的两部分将涵盖提示和工具,完整你的MCP服务器工具包。更多详情,可以查看这里和这里。
参考来源和阅读材料:- https://support.anthropic.com/en/articles/10065433-installing-claude-for-desktopClaude 安装指南
- https://modelcontextprotocol.io/quickstart/userModel Context Protocol 用户快速入门
- https://modelcontextprotocol.io/quickstart/serverModel Context Protocol 服务器快速入门
- https://modelcontextprotocol.io/tutorials/building-mcp-with-llmsModel Context Protocol 使用大语言模型构建教程
- https://github.com/modelcontextprotocolModel Context Protocol GitHub 仓库
- https://claude.aiClaude 官网
- https://claude.ai/downloadClaude 下载页面
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章