使用说明
FastMCP🚀
一个用于模型上下文协议(MCP)的快速、声明性和类型安全的服务器框架,灵感来自 FastMCP(Python).
用最少的样板在Dart中构建功能强大、可用于生产的MCP服务器。 fastmcp 使用现代语言功能和代码生成,让您专注于应用程序逻辑,而不是协议细节。
- ⚡️ 飞速发展: 使用直观的注释将MCP工具、资源和提示定义为简单的Dart函数。
- 🔒 设计类型安全: 代码生成器自动创建参数解析和验证,消除了手动转换和运行时错误。
- 🤖 自动模式生成: 您的函数签名会自动转换为用于工具和提示的兼容JSON模式。
- ✨ 高级功能,简单的API: 内置支持长时间运行的任务、进度报告和取消
McpContext对象。 - 💎 现代与合规: 实施最新的MCP
2025-06-18具有干净、模块化架构的规范。 - 🔌 可插拔运输工具: 从一个简单的开始
StdioTransport用于本地开发或使用生产就绪HttpTransport用于网络应用。
📚 目录
🚀 入门指南
1.安装
你需要 fastmcp 对于核心框架和 fastmcp_generator + build_runner 用于代码生成。
# Add to your pubspec.yaml dependencies
dart pub add fastmcp
# Add to your pubspec.yaml dev_dependencies
dart pub add --dev build_runner
dart pub add --dev fastmcp_generator
2.创建你的第一个工具
在你的 main.dart (或任何库文件),创建 FastMCP 实例并注释函数。
import 'package:fastmcp/fastmcp.dart';
part 'main.fastmcp.g.dart';
final app = FastMCP(name: 'MyFirstServer');
/// A simple tool that greets a user.
/// The doc comment is automatically used as the tool's description.
@Tool()
String greet({
/// This description will auto assigned to the parameter
required String name,
}) {
return 'Hello, $name!';
}
void main() async {
await app.run(
registerGenerated: registerGenerated,
transport: StdioTransport(),
);
}
3.运行代码生成器
从项目的根目录中,运行 build_runner.
dart run build_runner build
这将生成 main.fastmcp.g.dart 文件,包含连接您的 greet MCP发动机的功能。
4.运行服务器
就是这样!运行您的应用程序。
$fastmcp/example dart run lib/main.dart
[INFO] 03:11:24.875 [McpEngine]: Registering generated functions...
[INFO] 03:11:24.877 [McpEngine]: Registration complete.
[INFO] 03:11:24.878 [McpEngine]: Engine connected to transport.
[INFO] 03:11:24.878 [McpEngine]: FastMCP server "FastMCP Showcase Server" is running...
[INFO] 03:11:24.884 [HttpTransport]: 🚀 HTTP server listening on http://0.0.0.0:8080/mcp
您的MCP服务器现已上线,客户端可以调用 greet 工具。
✨ 特性
定义资源
使用向客户端公开数据 @Resource 注释。 fastmcp 自动包装简单的返回类型。
/// Provides the current server time.
@Resource(
uri: 'server://time',
mimeType: 'text/plain',
)
String getCurrentTime() => DateTime.now().toIso8601String();
定义提示
为LLM创建动态提示模板。您的函数必须返回 PromptResult.
@Prompt(name: 'code-review')
PromptResult createCodeReviewPrompt({required String language}) {
return PromptResult(
description: 'A system prompt for a $language code reviewer.',
messages: [
Message(
role: 'system',
content: TextContent(
text: 'You are an expert code reviewer for the $language language...'
),
),
],
);
}
长时间运行的任务 McpContext
对于需要时间的任务,只需添加 McpContext 作为工具的参数。 fastmcp 将注入它,使您可以访问进度报告和取消。
@Tool()
Future<String> longTask(McpContext context, {int steps = 10}) async {
for (int i = 1; i <= steps; i++) {
// Check if the client cancelled the operation
if (context.cancellationToken.isCancelled) {
return 'Task Cancelled!';
}
// Report progress back to the client
context.onProgress(i / steps, 'Processing step $i of $steps...');
await Future.delayed(const Duration(seconds: 1));
}
return 'Task Complete!';
}
自定义元数据
添加自定义 _meta 将字段添加到您的工具和资源中,以实现高级客户端集成。
@Tool(
name: 'admin-tool',
meta: const {
'permissions': ['admin'],
'dangerLevel': 'high',
},
)
void performAdminAction() { /* ... */ }
🤝 贡献
欢迎投稿!请随时打开问题或提交拉取请求
✍️ 作者
该项目由以下人员维护 Yash Makan.
我目前正在寻找新的工作机会和令人兴奋的项目。如果您正在寻找一位专门的Flutter开发人员,或者有一个激动人心的项目,请随时联系
- 电子邮件: contact@yashmakan.com
- 网站: 网站 yashmakan.com
- 领英: linkedin.com/in/yashmakan
- GitHub: @yashmakan
- Cal.com: @yashmakan
📜 许可证
该项目根据MIT许可证获得许可。看 许可证 文件以获取更多详细信息。