diff --git a/lib/src/analysis_server.dart b/lib/src/analysis_server.dart
index a91ee05..ba2b9b5 100644
--- a/lib/src/analysis_server.dart
+++ b/lib/src/analysis_server.dart
@@ -35,6 +35,7 @@
 
 class DartAnalysisServerWrapper extends AnalysisServerWrapper {
   Directory _tempProject;
+
   DartAnalysisServerWrapper() : super(SdkManager.sdk.sdkPath);
 
   @override
@@ -116,12 +117,10 @@
       }
 
       final serverArgs = <String>[
-        '--dartpad',
         '--client-id=DartPad',
-        '--client-version=$_sdkVersion'
+        '--client-version=$_sdkVersion',
       ];
-      _logger.info(
-          'About to start with server with SDK path `$sdkPath` and args: $serverArgs');
+      _logger.info('Starting server; sdk: `$sdkPath`, args: $serverArgs');
 
       _init = AnalysisServer.create(
         onRead: onRead,
@@ -181,10 +180,23 @@
 
     final source = sources[location.sourceName];
     final prefix = source.substring(results.replacementOffset, location.offset);
-    suggestions = suggestions
-        .where(
-            (s) => s.completion.toLowerCase().startsWith(prefix.toLowerCase()))
-        .toList();
+    suggestions = suggestions.where((suggestion) {
+      return suggestion.completion
+          .toLowerCase()
+          .startsWith(prefix.toLowerCase());
+    }).where((CompletionSuggestion suggestion) {
+      // We do not want to enable arbitrary discovery of file system resources.
+
+      // In order to avoid returning local file paths, we only allow returning
+      // IMPORT kinds that are dart: or package: imports.
+      if (suggestion.kind == 'IMPORT') {
+        final completion = suggestion.completion;
+        return completion.startsWith('dart:') ||
+            completion.startsWith('package:');
+      } else {
+        return true;
+      }
+    }).toList();
 
     suggestions.sort((CompletionSuggestion x, CompletionSuggestion y) {
       if (x.relevance == y.relevance) {
diff --git a/test/analysis_server_test.dart b/test/analysis_server_test.dart
index 00560df..4497fee 100644
--- a/test/analysis_server_test.dart
+++ b/test/analysis_server_test.dart
@@ -109,6 +109,25 @@
       }
     });
 
+    test('import_dart_core_test', () async {
+      // Ensure we can import dart: imports.
+      final testCode = "import 'dart:c'; main() { int a = 0; a. }";
+
+      final results = await analysisServer.complete(testCode, 14);
+      final completions = results.completions;
+
+      expect(
+        completions.every((completion) =>
+            completion.completion['completion'].startsWith('dart:')),
+        true,
+      );
+      expect(
+        completions.any((completion) =>
+            completion.completion['completion'].startsWith('dart:')),
+        true,
+      );
+    });
+
     test('import_and_other_test', () {
       final testCode = "import '/'; main() { int a = 0; a. }";
 
