diff --git a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs
index de0da135..ba3b5e7f 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs
@@ -134,6 +134,9 @@ namespace Microsoft.SqlTools.ServiceLayer
SqlAssessmentService.Instance.InitializeService(serviceHost);
serviceProvider.RegisterSingleService(SqlAssessmentService.Instance);
+ NotebookConvertService.Instance.InitializeService(serviceHost);
+ serviceProvider.RegisterSingleService(NotebookConvertService.Instance);
+
InitializeHostedServices(serviceProvider, serviceHost);
serviceHost.ServiceProvider = serviceProvider;
diff --git a/src/Microsoft.SqlTools.ServiceLayer/NotebookConvert/Contracts/NotebookConvertContracts.cs b/src/Microsoft.SqlTools.ServiceLayer/NotebookConvert/Contracts/NotebookConvertContracts.cs
new file mode 100644
index 00000000..71f85dd2
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/NotebookConvert/Contracts/NotebookConvertContracts.cs
@@ -0,0 +1,62 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+using Microsoft.SqlTools.ServiceLayer.Utility;
+using Microsoft.SqlTools.Utility;
+
+namespace Microsoft.SqlTools.ServiceLayer.NotebookConvert.Contracts
+{
+ public class ConvertNotebookToSqlParams : GeneralRequestDetails
+ {
+ ///
+ /// The raw Notebook JSON content to convert
+ ///
+ public string NotebookJson { get; set; }
+
+ }
+
+ public class ConvertNotebookToSqlResult : ResultStatus
+ {
+ ///
+ /// The raw SQL query content to display
+ ///
+ public string content;
+ }
+
+ public class ConvertNotebookToSqlRequest
+ {
+ public static readonly
+ RequestType Type =
+ RequestType.Create("notebookconvert/convertnotebooktosql");
+ }
+
+ public class ConvertSqlToNotebookParams : GeneralRequestDetails
+ {
+ ///
+ /// The ClientUri of the SQL Query file we're converting
+ ///
+ public string ClientUri { get; set; }
+
+ }
+
+ ///
+ ///
+ ///
+ public class ConvertSqlToNotebookResult : ResultStatus
+ {
+ ///
+ /// The raw Notebook JSON content to display
+ ///
+ public string content;
+ }
+
+ public class ConvertSqlToNotebookRequest
+ {
+ public static readonly
+ RequestType Type =
+ RequestType.Create("notebookconvert/convertsqltonotebook");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/NotebookConvert/NotebookConvertService.cs b/src/Microsoft.SqlTools.ServiceLayer/NotebookConvert/NotebookConvertService.cs
new file mode 100644
index 00000000..34ad2328
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/NotebookConvert/NotebookConvertService.cs
@@ -0,0 +1,126 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using System;
+using System.Threading.Tasks;
+using Microsoft.SqlTools.Hosting.Protocol;
+using Microsoft.SqlTools.ServiceLayer.Hosting;
+using Microsoft.SqlTools.ServiceLayer.NotebookConvert.Contracts;
+using Microsoft.SqlTools.ServiceLayer.SqlContext;
+using Microsoft.SqlTools.ServiceLayer.Workspace;
+
+namespace Microsoft.SqlTools.ServiceLayer.Agent
+{
+ ///
+ /// Main class for Notebook Convert Service
+ ///
+ public class NotebookConvertService
+ {
+ private static readonly Lazy instance = new Lazy(() => new NotebookConvertService());
+
+ public NotebookConvertService()
+ {
+ }
+
+ public static NotebookConvertService Instance
+ {
+ get { return instance.Value; }
+ }
+
+ ///
+ /// Service host object for sending/receiving requests/events.
+ ///
+ internal IProtocolEndpoint ServiceHost
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// Initializes the service by doing tasks such as setting up request handlers.
+ ///
+ ///
+ public void InitializeService(ServiceHost serviceHost)
+ {
+ this.ServiceHost = serviceHost;
+
+ this.ServiceHost.SetRequestHandler(ConvertNotebookToSqlRequest.Type, HandleConvertNotebookToSqlRequest);
+ this.ServiceHost.SetRequestHandler(ConvertSqlToNotebookRequest.Type, HandleConvertSqlToNotebookRequest);
+
+
+ }
+
+ #region Convert Handlers
+
+ internal async Task HandleConvertNotebookToSqlRequest(ConvertNotebookToSqlParams parameters, RequestContext requestContext)
+ {
+ await Task.Run(async () =>
+ {
+ try
+ {
+ var result = new ConvertNotebookToSqlResult();
+ result.content = parameters.NotebookJson;
+ await requestContext.SendResult(result);
+ }
+ catch (Exception e)
+ {
+ await requestContext.SendError(e);
+ }
+ });
+ }
+
+ internal async Task HandleConvertSqlToNotebookRequest(ConvertSqlToNotebookParams parameters, RequestContext requestContext)
+ {
+ await Task.Run(async () =>
+ {
+
+ try
+ {
+ var file = WorkspaceService.Instance.Workspace.GetFile(parameters.ClientUri);
+ // Temporary notebook that we just fill in with the sql until the parsing logic is added
+ var result = new ConvertSqlToNotebookResult
+ {
+ content = $@"{{
+ ""metadata"": {{
+ ""kernelspec"": {{
+ ""name"": ""SQL"",
+ ""display_name"": ""SQL"",
+ ""language"": ""sql""
+ }},
+ ""language_info"": {{
+ ""name"": ""sql"",
+ ""version"": """"
+ }}
+ }},
+ ""nbformat_minor"": 2,
+ ""nbformat"": 4,
+ ""cells"": [
+ {{
+ ""cell_type"": ""code"",
+ ""source"": [
+ ""{file.Contents}""
+ ],
+ ""metadata"": {{
+ ""azdata_cell_guid"": ""477da394-51fd-45ab-8a37-387b47b2b692""
+ }},
+ ""outputs"": [],
+ ""execution_count"": null
+ }}
+ ]
+}}"
+ };
+ await requestContext.SendResult(result);
+ }
+ catch (Exception e)
+ {
+ await requestContext.SendError(e);
+ }
+ });
+ }
+
+ #endregion // Convert Handlers
+
+ }
+}