详细介绍
FastMCP 是一个基于 TypeScript 的框架,专为构建符合 Model Context Protocol (MCP) 规范的服务器而设计。它简化了与 AI 助手的集成,提供工具定义、资源管理、提示模板、SSE 支持、认证机制等功能,并集成 CLI 工具用于测试和调试。开发者可以快速构建自定义 MCP 服务,适用于自动化工作流、数据查询服务、内容生成工具等场景。
核心功能
FastMCP 提供了多种核心功能,帮助开发者快速构建和管理 MCP 服务:
- 工具定义:允许开发者定义可执行函数,供客户端和 AI 调用,支持多种参数验证库(如 Zod、ArkType、Valibot)。
- 资源管理:支持管理各种数据资源(如文件、日志、图像等),并通过唯一 URI 访问。
- 提示模板:创建可重用的提示模板和工作流,标准化与 LLM 的交互。
- SSE 支持:通过 Server-Sent Events 实现实时通信,适用于需要流式输出的场景。
- 认证机制:支持自定义客户端认证逻辑,保护服务安全。
- 进度追踪:实时报告任务执行进度,提升用户体验。
安装方法
要使用 FastMCP,首先需要通过 npm 安装:
npm install fastmcp --save安装完成后,创建一个项目结构,包括 package.json 和 tsconfig.json 文件,并在 tsconfig.json 中启用 TypeScript 支持:
{
"compilerOptions": {
"target": "ES6",
"module": "CommonJS"
}
}使用方法
FastMCP 提供了多种使用方式,包括创建服务器、添加工具、启动服务等。
基础用法
以下是一个简单的示例,展示如何创建一个基本的 MCP 服务器:
import { createServer } from 'fastmcp';
const server = createServer();
// 处理根路径请求
server.get('/', (req, res) => {
res.send('Welcome to FastMCP Server!');
});
// 启动服务器
server.start(3000);添加工具
开发者可以定义可执行的功能工具,例如一个加法工具:
server.addTool({
name: 'add',
description: 'Add two numbers',
parameters: z.object({ a: z.number(), b: z.number() }),
execute: async (args) => {
return String(args.a + args.b);
}
});中间件示例
FastMCP 支持中间件系统,可以用于日志记录、错误处理等:
import { createServer, Middleware } from 'fastmcp';
const server = createServer();
// 创建一个简单的中间件
const loggerMiddleware: Middleware = (req, res, next) => {
console.log('请求开始:', req.url);
next();
};
// 将中间件应用到所有请求
server.use(loggerMiddleware);
server.get('/', (req, res) => {
res.send('Hello World!');
});
server.start(3000);CLI 工具
FastMCP 提供了 CLI 工具,用于测试和调试服务器:
npx fastmcp dev src/examples/addition.ts
npx fastmcp inspect src/examples/addition.ts使用场景
FastMCP 适用于多种需要与 AI 助手深度集成的场景,包括:
- 自动化工作流
- 数据查询服务
- 内容生成工具
- 系统管理助手
使用示例
以下是几个 FastMCP 的使用示例,展示其在不同场景下的应用:
数学计算服务
server.addTool({
name: 'add',
description: 'Add two numbers',
parameters: z.object({ a: z.number(), b: z.number() }),
execute: async (args) => {
return String(args.a + args.b);
}
});客户端请求示例:请计算 23 加 45 等于多少。预期结果:返回计算结果 68。
文件内容查询
server.addTool({
name: 'readFile',
description: 'Read file content',
parameters: z.object({ path: z.string() }),
execute: async (args) => {
const c fs.readFileSync(args.path, 'utf-8');
return content;
}
});客户端请求示例:请读取 /logs/app.log 文件内容。预期结果:返回日志文件内容。
图片处理服务
server.addTool({
name: 'getImage',
description: 'Return image content',
parameters: z.object({ path: z.string() }),
execute: async (args) => {
const image = await fs.readFileSync(args.path);
return image;
}
});客户端请求示例:显示 example.png 图片。预期结果:返回图片数据供客户端显示。
注意事项
在使用 FastMCP 时,需要注意以下几点:
- 目前主要支持 TypeScript/JavaScript 生态。
- SSE 功能需要额外配置。
- 对于非 Node.js 开发者,学习曲线可能较陡。
FastMCP 通过直观的 API 和中间件系统,帮助开发者快速构建和管理 MCP 服务,适用于多种 AI 助手集成场景。