From 67006b5a40a42ed94d60e57448d5a9bbe893ebb1 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 9 Jul 2025 11:10:22 -0700 Subject: [PATCH 1/4] Started omitting instructions if they are null. --- pkgs/dart_mcp/lib/src/api/initialization.dart | 17 ++++++---- .../test/api/initialization_test.dart | 33 +++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 pkgs/dart_mcp/test/api/initialization_test.dart diff --git a/pkgs/dart_mcp/lib/src/api/initialization.dart b/pkgs/dart_mcp/lib/src/api/initialization.dart index bcbd8f4b..ad311845 100644 --- a/pkgs/dart_mcp/lib/src/api/initialization.dart +++ b/pkgs/dart_mcp/lib/src/api/initialization.dart @@ -56,12 +56,17 @@ extension type InitializeResult.fromMap(Map _value) required ServerCapabilities serverCapabilities, required Implementation serverInfo, String? instructions, - }) => InitializeResult.fromMap({ - 'protocolVersion': protocolVersion.versionString, - 'capabilities': serverCapabilities, - 'serverInfo': serverInfo, - 'instructions': instructions, - }); + }) { + final map = { + 'protocolVersion': protocolVersion.versionString, + 'capabilities': serverCapabilities, + 'serverInfo': serverInfo, + }; + if (instructions != null) { + map['instructions'] = instructions; + } + return InitializeResult.fromMap(map); + } /// The version of the Model Context Protocol that the server wants to use. /// 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..282ad0c6 --- /dev/null +++ b/pkgs/dart_mcp/test/api/initialization_test.dart @@ -0,0 +1,33 @@ +// 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:js_interop'; + +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')); + }); +} From a779f1cf57f00aec65a2031e3e61cb27dd458df6 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 9 Jul 2025 12:42:50 -0700 Subject: [PATCH 2/4] removed unused import --- pkgs/dart_mcp/test/api/initialization_test.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/dart_mcp/test/api/initialization_test.dart b/pkgs/dart_mcp/test/api/initialization_test.dart index 282ad0c6..b271ce14 100644 --- a/pkgs/dart_mcp/test/api/initialization_test.dart +++ b/pkgs/dart_mcp/test/api/initialization_test.dart @@ -2,8 +2,6 @@ // 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:js_interop'; - import 'package:dart_mcp/server.dart'; import 'package:test/test.dart'; From 9a3271d0fefb6d059a2ceecb57005ffbbfd71f4e Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Mon, 14 Jul 2025 09:58:41 -0700 Subject: [PATCH 3/4] jake review --- pkgs/dart_mcp/CHANGELOG.md | 5 +++++ pkgs/dart_mcp/lib/src/api/initialization.dart | 17 ++++++----------- pkgs/dart_mcp/pubspec.yaml | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pkgs/dart_mcp/CHANGELOG.md b/pkgs/dart_mcp/CHANGELOG.md index 9847e7da..c403c596 100644 --- a/pkgs/dart_mcp/CHANGELOG.md +++ b/pkgs/dart_mcp/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.3.1 + +- 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 ad311845..85bb2a7b 100644 --- a/pkgs/dart_mcp/lib/src/api/initialization.dart +++ b/pkgs/dart_mcp/lib/src/api/initialization.dart @@ -56,17 +56,12 @@ extension type InitializeResult.fromMap(Map _value) required ServerCapabilities serverCapabilities, required Implementation serverInfo, String? instructions, - }) { - final map = { - 'protocolVersion': protocolVersion.versionString, - 'capabilities': serverCapabilities, - 'serverInfo': serverInfo, - }; - if (instructions != null) { - map['instructions'] = instructions; - } - return InitializeResult.fromMap(map); - } + }) => InitializeResult.fromMap({ + 'protocolVersion': protocolVersion.versionString, + 'capabilities': serverCapabilities, + 'serverInfo': serverInfo, + 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 From ef1edc257a4cdb96de715c5962d419cefb46ec76 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Mon, 14 Jul 2025 10:02:50 -0700 Subject: [PATCH 4/4] jake2 --- pkgs/dart_mcp/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/dart_mcp/CHANGELOG.md b/pkgs/dart_mcp/CHANGELOG.md index c403c596..6f0b5f52 100644 --- a/pkgs/dart_mcp/CHANGELOG.md +++ b/pkgs/dart_mcp/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.3.1 +## 0.3.1-wip - Fixes communication problem when a `MCPServer` is instantiated without instructions.