MCP服务器框架

FastMCP是一个快速、声明式且类型安全的服务器框架,用于构建符合Model Context Protocol (MCP)的生产就绪服务器,适用于Dart语言开发。

  • by YashMakan
  • Dart
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 YashMakan/fastmcp

使用说明

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开发人员,或者有一个激动人心的项目,请随时联系

📜 许可证

该项目根据MIT许可证获得许可。看 许可证 文件以获取更多详细信息。