mcp_dart 0.4.1
mcp_dart: ^0.4.1 copied to clipboard
Dart Impementation of Model Context Protocol (MCP) SDK.
Examples #
Stdio Server #
import 'package:mcp_dart/mcp_dart.dart';
void main() async {
McpServer server = McpServer(
Implementation(name: "example-server", version: "1.0.0"),
options: ServerOptions(
capabilities: ServerCapabilities(
resources: ServerCapabilitiesResources(),
tools: ServerCapabilitiesTools(),
),
),
);
server.tool(
"calculate",
description: 'Perform basic arithmetic operations',
inputSchemaProperties: {
'operation': {
'type': 'string',
'enum': ['add', 'subtract', 'multiply', 'divide'],
},
'a': {'type': 'number'},
'b': {'type': 'number'},
},
callback: ({args, extra}) async {
final operation = args!['operation'];
final a = args['a'];
final b = args['b'];
return CallToolResult(
content: [
TextContent(
text: switch (operation) {
'add' => 'Result: ${a + b}',
'subtract' => 'Result: ${a - b}',
'multiply' => 'Result: ${a * b}',
'divide' => 'Result: ${a / b}',
_ => throw Exception('Invalid operation'),
},
),
],
);
},
);
server.connect(StdioServerTransport());
}
SSE Server (Deprecated) #
import 'dart:io';
import 'package:mcp_dart/mcp_dart.dart';
Future<void> main() async {
final mcpServer = McpServer(
Implementation(name: "example-dart-server", version: "1.0.0"),
options: ServerOptions(capabilities: ServerCapabilities()),
);
mcpServer.tool(
"calculate",
description: 'Perform basic arithmetic operations',
inputSchemaProperties: {
'operation': {
'type': 'string',
'enum': ['add', 'subtract', 'multiply', 'divide'],
},
'a': {'type': 'number'},
'b': {'type': 'number'},
},
callback: ({args, extra}) async {
final operation = args!['operation'];
final a = args['a'];
final b = args['b'];
return CallToolResult(
content: [
TextContent(
text: switch (operation) {
'add' => 'Result: ${a + b}',
'subtract' => 'Result: ${a - b}',
'multiply' => 'Result: ${a * b}',
'divide' => 'Result: ${a / b}',
_ => throw Exception('Invalid operation'),
},
),
],
);
},
);
final sseServerManager = SseServerManager(mcpServer);
try {
final port = 3000;
final server = await HttpServer.bind(InternetAddress.anyIPv4, port);
print('Server listening on http://localhost:$port');
await for (final request in server) {
sseServerManager.handleRequest(request);
}
} catch (e) {
print('Error starting server: $e');
exitCode = 1;
}
}