blob: d862f480b43bd2763878ca646e843bbed318d282 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'dart:convert';
import 'dart:io' as io;
import 'package:async/async.dart';
import 'package:dart_mcp/server.dart';
import 'package:stream_channel/stream_channel.dart';
void main() {
DartMCPServer(
StreamChannel.withCloseGuarantee(io.stdin, io.stdout)
.transform(StreamChannelTransformer.fromCodec(utf8))
.transformStream(const LineSplitter())
.transformSink(
StreamSinkTransformer.fromHandlers(
handleData: (data, sink) {
sink.add('$data\n');
},
),
),
);
}
/// Our actual MCP server.
base class DartMCPServer extends MCPServer with ToolsSupport {
DartMCPServer(super.channel)
: super.fromStreamChannel(
implementation: ServerImplementation(
name: 'example dart server',
version: '0.1.0',
),
instructions: 'A basic tool that can respond with "hello world!"',
);
@override
FutureOr<InitializeResult> initialize(InitializeRequest request) {
registerTool(
Tool(name: 'hello world', inputSchema: ObjectSchema()),
(_) => CallToolResult(content: [TextContent(text: 'hello world!')]),
);
return super.initialize(request);
}
}