diff --git a/pkgs/dart_mcp/CHANGELOG.md b/pkgs/dart_mcp/CHANGELOG.md index 9847e7da..6f0b5f52 100644 --- a/pkgs/dart_mcp/CHANGELOG.md +++ b/pkgs/dart_mcp/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.3.1-wip + +- Fixes communication problem when a `MCPServer` is instantiated without + instructions. + ## 0.3.0 - Added error checking to required fields of all `Request` subclasses so that diff --git a/pkgs/dart_mcp/lib/src/api/initialization.dart b/pkgs/dart_mcp/lib/src/api/initialization.dart index bcbd8f4b..85bb2a7b 100644 --- a/pkgs/dart_mcp/lib/src/api/initialization.dart +++ b/pkgs/dart_mcp/lib/src/api/initialization.dart @@ -60,7 +60,7 @@ extension type InitializeResult.fromMap(Map _value) 'protocolVersion': protocolVersion.versionString, 'capabilities': serverCapabilities, 'serverInfo': serverInfo, - 'instructions': instructions, + if (instructions != null) 'instructions': instructions, }); /// The version of the Model Context Protocol that the server wants to use. diff --git a/pkgs/dart_mcp/pubspec.yaml b/pkgs/dart_mcp/pubspec.yaml index e315cb9d..56cc5f29 100644 --- a/pkgs/dart_mcp/pubspec.yaml +++ b/pkgs/dart_mcp/pubspec.yaml @@ -1,5 +1,5 @@ name: dart_mcp -version: 0.3.0 +version: 0.3.1-wip description: A package for making MCP servers and clients. repository: https://github.com/dart-lang/ai/tree/main/pkgs/dart_mcp issue_tracker: https://github.com/dart-lang/ai/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Adart_mcp diff --git a/pkgs/dart_mcp/test/api/initialization_test.dart b/pkgs/dart_mcp/test/api/initialization_test.dart new file mode 100644 index 00000000..b271ce14 --- /dev/null +++ b/pkgs/dart_mcp/test/api/initialization_test.dart @@ -0,0 +1,31 @@ +// 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 'package:dart_mcp/server.dart'; +import 'package:test/test.dart'; + +void main() { + test('null instructions', () async { + final result = InitializeResult( + protocolVersion: ProtocolVersion.latestSupported, + serverCapabilities: ServerCapabilities(), + serverInfo: Implementation(name: 'name', version: 'version'), + ); + + final map = result as Map; + expect(map.containsKey('instructions'), isFalse); + }); + + test('nonnull instructions', () async { + final result = InitializeResult( + protocolVersion: ProtocolVersion.latestSupported, + serverCapabilities: ServerCapabilities(), + serverInfo: Implementation(name: 'name', version: 'version'), + instructions: 'foo', + ); + + final map = result as Map; + expect(map['instructions'], equals('foo')); + }); +}