关于 Building MCP Servers: Part 1 — Getting Started with Resources
这是一篇面向 MCP 开发者的入门教程,介绍如何用 Node.js、TypeScript 和 @modelcontextprotocol/sdk 构建 MCP 服务。重点是通过只读资源向 LLM 提供文件、数据库或 API 内容,并说明后续可扩展到工具。
主要功能
- 01MCP 与资源概念介绍
- 02Node.js 和 TypeScript 项目初始化
- 03定义带 URI 与元数据的只读资源
- 04文档、日志和客户数据示例
适用场景
- 01为 LLM 提供文档或指南
- 02通过资源呈现日志与错误信息
- 03向模型开放客户数据摘要
MCP 相关
教程展示如何使用 @modelcontextprotocol/sdk 构建 MCP 服务,并通过资源向 MCP 客户端暴露只读内容;也简要介绍 MCP 工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
构建 MCP 服务:第 1 部分 — 从资源入门
本教程将带你设置一个基础 MCP(Model Context Protocol)服务,向 Claude 等大语言模型(LLM)提供只读资源。你将了解 MCP 是什么、资源有何用处,以及如何使用 @modelcontextprotocol/sdk 初始化 Node.js/TypeScript 项目。
目录
- 什么是 Model Context Protocol?
- 什么是 MCP 资源?
- 为什么使用资源?
- 示例服务
- 开始使用
- 后续步骤
- MCP 工具(动态操作)
- 工具与提示词
- 完成我们的问候服务
- 来源与延伸阅读
- 许可证
什么是 Model Context Protocol?
Model Context Protocol(MCP)是一种标准化接口,支持大模型安全地与外部数据和服务交互。借助 MCP,你可以以受控的方式向 AI 模型提供文件、数据库、API 等内容。
什么是 MCP 资源?
资源是通过唯一 URI 提供内容(文本或二进制数据)的只读端点。例如:
file:///path/to/file.txtdatabase://users/123api://weather/latest
每个资源都有显示名称和 MIME 类型等元数据。
为什么使用资源?
资源支持大模型:
- 读取文件和数据库
- 执行命令
- 访问 API
- 与本地工具交互
所有交互都需要用户明确授权,从而确保安全性和可审计性。
示例服务
文档服务
提供你的文档:
docs://api/reference → API documentation
docs://guides/getting-started → User guides
日志分析服务
提供系统日志:
logs://system/today → Today's logs
logs://errors/recent → Recent error messages
客户数据服务
提供客户洞察:
customers://profiles/summary → Customer overview
customers://feedback/recent → Latest feedback
开始使用
前提条件
- Node.js(>= 16)
- npm(>= 8)
- TypeScript
安装
mkdir hello-mcp
cd hello-mcp
npm init -y
npm install @modelcontextprotocol/sdk
npm install -D typescript @types/node
项目设置
-
更新
package.json:{ "name": "hello-mcp", "version": "1.0.0", "type": "module", "scripts": { "build": "tsc", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.1.0" }, "devDependencies": { "typescript": "^5.7.2", "@types/node": "^22.10.5" } } -
创建
tsconfig.json:{ "compilerOptions": { "target": "ES2022", "module": "Node16", "moduleResolution": "Node16", "outDir": "./build", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"] } -
创建
src/目录,然后开始编写 MCP 服务。
后续步骤
请查看第 2 部分,了解如何配置传输方式和高级功能。
MCP 工具(动态操作)
MCP 工具(也称为动态操作)可让你定义自定义函数,供大模型在会话期间调用,从而将 MCP 的能力扩展到静态资源之外。
工具与提示词
| 方面 | MCP 工具 | 提示词 |
|---|---|---|
| 能力 | 执行代码和操作 | 静态自然语言 |
| 安全性 | 受控且可审计 | 不产生外部影响 |
| 灵活性 | 高(自定义逻辑) | 仅限于推理 |
完成我们的问候服务
下面是一个简单的示例,展示如何创建一个提供问候资源的服务:
import { ResourceServer } from "@modelcontextprotocol/sdk";
const server = new ResourceServer({ port: 3000 });
server.addResource({
uri: "greeting://hello",
displayName: "Greeting Resource",
fn: async (req) => {
const name = req.query.name || "World";
return `Hello, ${name}!`;
},
});
server.listen(() => console.log("Greeting server running on port 3000"));
来源与延伸阅读
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。