Token导航 LogoToken导航TokenDH.com
MCP server dart logo
AI代理未说明官方级别未说明来源级核验

MCP server dart

MCP Server

一个基于Dart的开发者友好型MCP(模型上下文协议)框架,支持注解和代码生成,适用于构建MCP服务器。

工具数

0

提示词数

0

GitHub Stars

18

资源数

0
代码生成ClaudeAI代理Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Zfinix

提供方

Zfinix

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

![Dart](https://dart.dev) ![MCP Protocol](https://modelcontextprotocol.io/) ![License: MIT](https://opensource.org/licenses/MIT)

MCP Dart Framework

A. Dart的开发人员友好型MCP(模型上下文协议)框架 随着 注释代码生成.构建MCP服务器就像用注释方法一样简单 @MCPTool, @MCPResource,或 @MCPPrompt -类似于how json_serializablefreezed 作品。

✨ 特性

  • 🏷️ 基于注解:用简单的注释声明MCP工具、资源和提示
  • 🔧 代码生成:使用自动生成样板 build_runner 基于扩展的注册
  • ✨ 不 @override 必需的:没有继承样板的干净方法声明
  • 📡 多个传输:支持stdio、HTTP和带有服务器发送事件(SSE)的流式HTTP
  • 🔍 类型安全:全飞镖式安全,自动参数提取
  • 📚 JSON模式:从方法签名自动生成输入模式
  • 🧪 经过全面测试:具有JSON-RPC命令验证的全面测试套件
  • ⚡ 生产就绪:使用Relic HTTP服务器完成MCP 2025-06-18协议的实现
  • 🌐 现代HTTP:基于Relic框架构建,支持中间件、CORS、日志记录和健康检查
  • 🔧 监控:内置健康检查端点和连接监控
  • 📊 SSE支持:根据MCP 2025-06-18规范,服务器发送实时流媒体事件

🚀 快速开始

1.添加依赖项

dependencies:
  mcp_server_dart: ^1.1.2
  relic: ^0.5.0  # Modern HTTP framework
  logging: ^1.3.0  # For server logging

dev_dependencies:
  build_runner: ^2.4.13

2.创建您的MCP服务器

import 'package:mcp_server_dart/mcp_server_dart.dart';

part 'my_server.mcp.dart'; // Generated file

class MyMCPServer extends MCPServer {
  MyMCPServer() : super(name: 'my-server', version: '1.0.0') {
    // Register all generated handlers using the extension
    registerGeneratedHandlers();
  }

  @MCPTool('greet', description: 'Greet someone by name')
  Future greet(String name) async {
    return 'Hello, $name! 👋';
  }

  @MCPTool('calculate', description: 'Perform basic arithmetic')
  Future calculate(double a, double b, String operation) async {
    switch (operation) {
      case 'add': return a + b;
      case 'subtract': return a - b;
      case 'multiply': return a * b;
      case 'divide': return b != 0 ? a / b : throw ArgumentError('Division by zero');
      default: throw ArgumentError('Unknown operation: $operation');
    }
  }

  @MCPResource('status', description: 'Server status information')
  Future> getStatus() async {
    return {
      'server': name,
      'version': version,
      'uptime': DateTime.now().toIso8601String(),
      'status': 'healthy',
    };
  }

  @MCPPrompt('codeReview', description: 'Generate code review prompts')
  String codeReviewPrompt(String code, String language) {
    return '''Please review this $language code for:
- Best practices and conventions
- Potential bugs or issues
- Performance improvements
- Security considerations

Code:

$code

  }
}

3.生成代码

dart run build_runner build

这会产生 my_server.mcp.dart 具有提供自动注册方法的扩展。

4.运行服务器

import 'dart:io';
import 'package:logging/logging.dart';

void main() async {
  // Enable logging to see server activity
  Logger.root.level = Level.INFO;
  Logger.root.onRecord.listen((record) {
    print('${record.level.name}: ${record.time}: ${record.message}');
  });

  final server = MyMCPServer(); // Handlers auto-registered in constructor
  
  // Choose your transport:
  await server.start();        // For CLI integration (stdio)
  // OR
  await server.serve(port: 8080);   // For HTTP server with health checks
}

服务器功能:

  • 🌐 HTTP服务器:使用Relic框架在指定端口上运行
  • 🔍 健康检查:可在 http://localhost:8080/health
  • 📊 状态端点:服务器指标 http://localhost:8080/status
  • 📡 MCP端点:可流式传输HTTP http://localhost:8080/mcp
  • 📝 请求日志记录:所有记录有定时的HTTP请求
  • 🛡️ CORS支持:默认情况下启用跨源请求
  • 优雅地关闭:正确处理信号情报/信号
  • 🔄 SSE流媒体:服务器发送事件以进行实时通信

📖 注释参考

@MCPTool

将方法标记为LLM可以调用的MCP工具:

@MCPTool('toolName', description: 'What this tool does')
Future myTool(ParameterType param) async {
  // Implementation
}

特征:

  • 自动参数提取和类型检查
  • 从方法签名生成JSON模式
  • 支持默认的可选参数
  • 异步和同步方法支持

@MCPResource

将方法标记为提供数据的MCP资源:

@MCPResource('resourceName', 
  description: 'What this resource contains',
  mimeType: 'application/json'  // Optional
)
Future> getResource() async {
  // Return resource data
}

@MCPPrompt

将方法标记为MCP提示模板:

@MCPPrompt('promptName', description: 'What this prompt does')
String generatePrompt(String context, String task) {
  return 'Generated prompt based on $context and $task';
}

@MCPParam

为参数提供其他元数据:

@MCPTool('example')
Future example(
  @MCPParam(description: 'The user name', example: 'John Doe') 
  String name,
  
  @MCPParam(required: false, description: 'Age in years')
  int age = 25,
) async {
  return 'Hello $name, age $age';
}

🌟 完整示例

请参阅 谷歌地图MCP示例 为了进行全面的演示:

class GoogleMapsMCP extends MCPServer {
  GoogleMapsMCP() : super(name: 'google-maps-mcp', version: '1.0.0') {
    registerGeneratedHandlers();
  }

  @MCPTool('searchPlace', description: 'Find places by name or address')
  Future> searchPlace(String query, int limit = 5) async {
    // Implementation with mock Google Maps API calls
  }

  @MCPTool('getDirections', description: 'Get directions between two points')
  Future> getDirections(
    String origin, 
    String destination, 
    String mode = 'driving'
  ) async {
    // Implementation
  }

  @MCPResource('currentLocation', description: 'Current user location')
  Future> getCurrentLocation() async {
    // Implementation
  }

  @MCPPrompt('locationSummary', description: 'Generate location summaries')
  String locationSummaryPrompt(String location, String summaryType = 'general') {
    // Generate contextual prompts
  }
}

🔧 高级用法

自定义参数验证

@MCPTool('validateEmail')
Future validateEmail(String email) async {
  if (!email.contains('@')) {
    throw ArgumentError('Invalid email format');
  }
  // Validation logic
}

复杂输入模式

@MCPTool('complexTool', inputSchema: {
  'type': 'object',
  'properties': {
    'config': {
      'type': 'object',
      'properties': {
        'timeout': {'type': 'integer', 'minimum': 1},
        'retries': {'type': 'integer', 'maximum': 10}
      }
    }
  }
})
Future complexTool(Map config) async {
  // Handle complex nested parameters
}

多种运输支持

服务器支持stdio和HTTP传输。您可以扩展上面的基本示例来处理命令行参数:

// Add argument handling to your main() function:
if (args.contains('--stdio')) {
  print('🔌 Starting MCP server on stdio...');
  await server.start();
} else {
  final port = args.contains('--port') 
      ? int.parse(args[args.indexOf('--port') + 1])
      : 8080;
  
  print('🌐 Starting HTTP server on port $port...');
  print('🔍 Health check: http://localhost:$port/health');
  print('📊 Status: http://localhost:$port/status');
  print('📡 MCP endpoint: http://localhost:$port/mcp');
  
  await server.serve(port: port);
}

运输选项:

  • 工作室:非常适合Claude Desktop集成和CLI工具
  • 超文本传输协议:非常适合web应用程序、测试和调试 遗迹框架
  • 流式HTTP:最新的MCP 2025-06-18规范,支持服务器发送事件
  • 健康监测:用于生产监控的内置端点

🌐 可流式HTTP传输(MCP 2025-06-18)

MCP Dart框架现在支持最新的 流式HTTP 运输规范:

主要特点

  • 单MCP端点: POST/GET /mcp 处理所有MCP通信
  • 服务器发送的事件:服务器发起的消息的实时流式传输
  • 会话管理:自动生成和验证会话ID
  • 协议头: MCP-Protocol-Version: 2025-06-18 支持
  • 安全:用于开发的源验证和本地主机绑定

MCP检验员测试

# Start your server
dart run main.dart --example calculator --http --port 8080

# Test with Inspector CLI
npx @modelcontextprotocol/inspector --cli http://localhost:8080/mcp --transport streamable-http --method tools/list

# Test with Inspector UI
npx @modelcontextprotocol/inspector
# Then connect to: http://localhost:8080/mcp with "Streamable HTTP" transport

cURL测试

# Initialize connection
curl -X POST http://localhost:8080/mcp \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'MCP-Protocol-Version: 2025-06-18' \
  --data '{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{}}}'

# List tools
curl -X POST http://localhost:8080/mcp \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'MCP-Protocol-Version: 2025-06-18' \
  --data '{"jsonrpc":"2.0","id":"2","method":"tools/list"}'

# Open SSE stream
curl -H 'Accept: text/event-stream' http://localhost:8080/mcp

🌐 Relic框架集成

MCP Dart框架使用 遗物 作为其HTTP服务器的基础。Relic是一个受Shelf启发的现代类型安全web服务器框架,但有重大改进:

为什么是Relic?

  • 🔒 类型安全:没有了 dynamic types-所有内容都是强类型的
  • ⚡ 演出:用途 Uint8List 而不是 List 为了获得更好的性能
  • 🛣️ 高级路由:基于trie的高效路由,具有参数提取功能
  • 🔧 现代标题:带验证的类型化标头解析
  • 🧪 测试良好:扩展测试覆盖范围和生产就绪

由Relic提供支持的服务器功能

// Your MCP server automatically gets these features:
await server.serve(
  port: 8080,
  address: InternetAddress.anyIPv4,
  enableCors: true,  // CORS middleware
  keepAliveTimeout: Duration(seconds: 30),
);

内置端点:

  • GET /health -使用服务器指标进行健康检查
  • GET /status -详细的服务器状态和功能
  • POST/GET /mcp -MCP可流式HTTP端点
  • GET /ws -WebSocket升级端点(即将推出)

中间件堆栈:

  • 🌐 CORS中间件:跨源请求支持
  • 📝 日志中间件:带计时的请求/响应日志记录
  • 🛡️ 错误处理:优雅的错误处理和响应
  • 🛣️ 路由:自动路线注册和参数提取

有关Relic功能的更多详细信息,请参阅 官方文物文件.

二进制编译用于生产

将MCP服务器编译为本机二进制文件,以获得最佳性能和易于部署:

# Compile to standalone binary
dart compile exe my_server.dart -o mcp-server

# Cross-platform compilation
dart compile exe my_server.dart -o mcp-server-linux --target-os=linux
dart compile exe my_server.dart -o mcp-server-macos --target-os=macos
dart compile exe my_server.dart -o mcp-server.exe --target-os=windows

二进制部署的好处:

  • 无需Dart运行时 -独立可执行文件
  • 更快的启动 -无VM开销
  • 易于分发 -单文件部署
  • 生产就绪 -优化性能

Claude桌面配置与二进制文件:

{
  "mcpServers": {
    "my-server": {
      "command": "/path/to/mcp-server"
    }
  }
}

🧪 测试

该框架包括单元和集成测试的全面测试功能。以下是几种方法:

测试HTTP服务器

通过Relic集成,您可以轻松测试MCP服务器的HTTP端点:

import 'dart:convert';
import 'dart:io';
import 'package:test/test.dart';

void main() {
  group('MCP Server HTTP Tests', () {
    late MyMCPServer server;
    late HttpClient client;
    
    setUpAll(() async {
      server = MyMCPServer(); // Handlers auto-registered
      await server.serve(port: 8081); // Use different port for testing
      
      client = HttpClient();
    });
    
    tearDownAll(() async {
      await server.shutdown();
      client.close();
    });

    test('health check endpoint works', () async {
      final request = await client.get('localhost', 8081, '/health');
      final response = await request.close();
      
      expect(response.statusCode, equals(200));
      
      final body = await response.transform(utf8.decoder).join();
      final data = jsonDecode(body);
      expect(data['status'], equals('healthy'));
      expect(data['server'], equals('my-server'));
    });

    test('MCP endpoint works with Streamable HTTP', () async {
      final request = await client.post('localhost', 8081, '/mcp');
      request.headers.set('content-type', 'application/json');
      request.headers.set('mcp-protocol-version', '2025-06-18');
      request.write(jsonEncode({
        'jsonrpc': '2.0',
        'id': '1',
        'method': 'tools/list'
      }));
      
      final response = await request.close();
      expect(response.statusCode, equals(200));
      
      final body = await response.transform(utf8.decoder).join();
      final data = jsonDecode(body);
      expect(data['result']['tools'], isA
());
    });
  });
}

单元测试单个方法

import 'package:test/test.dart';
import 'my_server.dart';

void main() {
  group('MyMCPServer', () {
    late MyMCPServer server;
    
    setUp(() {
      server = MyMCPServer(); // Handlers auto-registered
    });

    test('greet method works directly', () async {
      final result = await server.greet('World');
      expect(result, equals('Hello, World! 👋'));
    });

    test('calculate method works', () async {
      final result = await server.calculate(10, 5, 'add');
      expect(result, equals(15));
    });
  });
}

MCP检验员测试

该框架已经过测试 MCP官方检查员:

# CLI Testing
npx @modelcontextprotocol/inspector --cli http://localhost:8080/mcp --transport streamable-http --method tools/list

# UI Testing
npx @modelcontextprotocol/inspector
# Connect to: http://localhost:8080/mcp with "Streamable HTTP" transport

📚 例子

该框架包括几个工作示例:

1. 基本示例

手动注册的简单MCP服务器:

  • 你好,世界 (hello_world.dart):基本问候服务器
  • 计算器 (calculator.dart):数学运算
  • ✅ 手动工具注册
  • ✅ 资源和及时支持
  • ✅ stdio和HTTP模式

2. 高级示例

全面的基于注释的服务器:

  • 谷歌地图 (google_maps.dart):具有多种工具、资源和提示的定位服务
  • 气象局 (weather_service.dart):天气API模拟数据
  • @MCPTool, @MCPResource, @MCPPrompt 注释
  • ✅ 生成的注册码
  • ✅ 复杂参数处理

3. 主流道

统一示例跑步者:

  • ✅ 使用命令行选择运行所有示例
  • ✅ 支持不同的运输方式
  • ✅ 生产就绪部署示例

运行示例

cd example

# Install dependencies
dart pub get

# Generate code for annotation-based examples
dart run build_runner build

# Run main example runner (shows all available examples)
dart run main.dart

# Run specific examples
dart run main.dart --example hello-world
dart run main.dart --example calculator  
dart run main.dart --example weather
dart run main.dart --example google-maps

# Run with HTTP server
dart run main.dart --example google-maps --http --port 8080

# Compile examples to binaries
dart compile exe main.dart -o mcp-examples-runner
dart compile exe lib/advanced/google_maps.dart -o google-maps-server
dart compile exe lib/basic/calculator.dart -o calculator-server

# Run compiled binaries
./mcp-examples-runner --example google-maps
./google-maps-server
./calculator-server

📋 开发工作流程

  1. 编写服务器类 延伸 MCPServer
  2. 注释方法 随着 @MCPTool, @MCPResource,或 @MCPPrompt
  3. 运行代码生成: dart run build_runner build
  4. 呼叫 registerGeneratedHandlers() 在你的构造函数中
  5. 选择交通工具 (stdio、HTTP、流式HTTP)并启动服务器

发展观察模式

dart run build_runner watch

修改注释时自动重新生成代码。

🚀 生产部署

二进制编译工作流

# 1. Install dependencies and generate code
dart pub get
dart run build_runner build

# 2. Compile to binary
dart compile exe lib/my_server.dart -o dist/mcp-server

# 3. Deploy binary (no Dart runtime needed!)
./dist/mcp-server

Docker部署

# Multi-stage build for minimal production image
FROM dart:stable AS build

WORKDIR /app
COPY . .
RUN dart pub get
RUN dart run build_runner build
RUN dart compile exe lib/server.dart -o mcp-server

# Runtime stage - minimal Alpine image
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=build /app/mcp-server ./
CMD ["./mcp-server"]

文件命名灵活性

该框架支持任何文件命名约定:

# Standard Dart files
my_server.dart

# Custom extensions  
weather_server.mcp
api_server.tool

# No extension
weather-server
my-mcp-tool

# Executable scripts
#!/usr/bin/env dart

对于具有自定义名称的代码生成:

// Keep logic in .dart files for build_runner
// weather_logic.dart
part 'weather_logic.mcp.dart';
class WeatherLogic extends MCPServer { /* ... */ }

// Create wrapper with any name (weather-server, no extension)
import 'weather_logic.dart';
void main() {
  final server = WeatherLogic()..registerGeneratedHandlers();
  await server.start(); // For CLI integration (stdio)
  await server.serve(port: 8080); // For HTTP server with health checks
}

🏗️ 框架架构

graph TB
    subgraph "👨‍💻 Your Code"
        UserClass["`**MyMCPServer**
        @MCPTool('greet')
        @MCPResource('data')
        @MCPPrompt('help')`"]
    end

    subgraph "🏗️ MCP Dart Framework"
        subgraph "📝 Annotations"
            MCPTool["@MCPTool"]
            MCPResource["@MCPResource"] 
            MCPPrompt["@MCPPrompt"]
        end
        
        subgraph "⚙️ Code Generation"
            Builder["MCP Generator"]
            Generated["Generated Extension"]
        end
        
        subgraph "🖥️ Core Server"
            MCPServer["MCPServer Base Class"]
            JSONRPCHandler["JSON-RPC Handler"]
        end
        
        subgraph "🚀 Transport"
            StdioTransport["Stdio Transport"]
            HTTPTransport["HTTP Transport"]
            StreamableHTTP["Streamable HTTP + SSE"]
        end
    end

    subgraph "🤖 MCP Clients"
        ClaudeDesktop["Claude Desktop"]
        MCPInspector["MCP Inspector"]
        CustomClient["Custom Client"]
    end

    UserClass --> MCPTool
    UserClass --> MCPResource  
    UserClass --> MCPPrompt
    Builder --> Generated
    Generated --> MCPServer
    MCPServer --> JSONRPCHandler
    JSONRPCHandler --> StdioTransport
    JSONRPCHandler --> HTTPTransport
    JSONRPCHandler --> StreamableHTTP
    StdioTransport --> ClaudeDesktop
    HTTPTransport --> MCPInspector
    StreamableHTTP --> MCPInspector
    StreamableHTTP --> CustomClient

🤝 贡献

  1. 分叉存储库
  2. 创建特征分支: git checkout -b feature/amazing-feature
  3. 提交您的更改: git commit -m 'Add amazing feature'
  4. 推到分支: git push origin feature/amazing-feature
  5. 打开拉取请求

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

🙏 致谢

📊 项目状态

  • 核心框架:完成MCP 2025-06-18的实施
  • 代码生成:正在工作的build_runner集成
  • 传输层:支持Stdio、HTTP和流式HTTP 遗迹框架
  • HTTP服务器:具有中间件、CORS、日志记录、健康检查的生产就绪服务器
  • 流式HTTP:具有服务器发送事件的完整MCP 2025-06-18规范
  • 二进制编译:使用dart compile exe支持本机可执行文件
  • 测试:具有JSON-RPC和HTTP端点验证的全面测试套件
  • 例子:记录和监控的多个工作示例
  • 生产就绪:经过全面测试的框架,具有优雅的关机功能
  • 部署选项:开发模式、二进制文件、Docker、自定义命名
  • MCP检查员:与官方MCP Inspector UI和CLI完全兼容

目录标签

目录标签

代码生成ClaudeAI代理Dart本地部署MCP协议Dart框架注解驱动HTTP服务器

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP