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'));
+  });
+}