Started omitting instructions if they are null. (#221)
fixes https://github.com/dart-lang/ai/issues/196
This makes sure that the map for the InitializationResult doesn't include a `instructions` entry if the value is null.
diff --git a/pkgs/dart_mcp/CHANGELOG.md b/pkgs/dart_mcp/CHANGELOG.md
index 9847e7d..6f0b5f5 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 bcbd8f4..85bb2a7 100644
--- a/pkgs/dart_mcp/lib/src/api/initialization.dart
+++ b/pkgs/dart_mcp/lib/src/api/initialization.dart
@@ -60,7 +60,7 @@
'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 e315cb9..56cc5f2 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 0000000..b271ce1
--- /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<String, Object?>;
+ 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<String, Object?>;
+ expect(map['instructions'], equals('foo'));
+ });
+}