module McpServer = // #r "nuget: ModelContextProtocol,0.4.0-preview.1" // #r "nuget: Microsoft.Extensions.Hosting" open Microsoft.Extensions.DependencyInjection open Microsoft.Extensions.Hosting open Microsoft.Extensions.Logging open ModelContextProtocol.Server open System open System.ComponentModel [] type EchoTool = [] static member Echo (message:string) = $"Hello from F#: {message}" // Define your urls whatever .NET Core style you like.... let args = [|"--urls \"http://localhost:5000\""|] let builder = Host.CreateApplicationBuilder args builder.Logging.AddConsole(fun consoleLogOptions -> // Configure all logs to go to stderr consoleLogOptions.LogToStandardErrorThreshold <- LogLevel.Trace ) builder.Services .AddMcpServer(fun opts -> opts.ServerInfo <- ModelContextProtocol.Protocol.Implementation( Name = "MyServer", Version = "1.0", Title = "My echo server" ) ) .WithStdioServerTransport() .WithToolsFromAssembly() builder.Build().RunAsync() |> System.Threading.Tasks.Task.WaitAny // Test in VSCode CoPilot: // Create .vscode\mcp.json file, you can make it like this: // VSCode: Press Ctrl + Shift + P -> Command (stdio), Command to run: // dotnet fsi c:\mypath\Server.fsx // Then Ctrl + Alt + I -> Agents mode, should be available now. module Server = // #r "nuget: ModelContextProtocol,0.4.0-preview.1" // #r "nuget: Microsoft.Extensions.Hosting" open Microsoft.Extensions.DependencyInjection open Microsoft.Extensions.Hosting open Microsoft.Extensions.Logging open ModelContextProtocol.Server open System open System.ComponentModel [] type EchoTool = [] static member Echo (message:string) = $"Hello from F#: {message}" // Define your urls whatever .NET Core style you like.... let args = [|"--urls \"http://localhost:5000\""|] let builder = Host.CreateApplicationBuilder args builder.Logging.AddConsole(fun consoleLogOptions -> // Configure all logs to go to stderr consoleLogOptions.LogToStandardErrorThreshold <- LogLevel.Trace ) builder.Services .AddMcpServer(fun opts -> opts.ServerInfo <- ModelContextProtocol.Protocol.Implementation( Name = "MyServer", Version = "1.0", Title = "My echo server" ) ) .WithStdioServerTransport() .WithToolsFromAssembly() builder.Build().RunAsync() |> System.Threading.Tasks.Task.WaitAny // Test in VSCode CoPilot: // Create .vscode\mcp.json file, you can make it like this: // VSCode: Press Ctrl + Shift + P -> Command (stdio), Command to run: // dotnet fsi c:\mypath\Server.fsx // Then Ctrl + Alt + I -> Agents mode, should be available now. (* Content of generated mcp.json example: { "servers": { "MyServer": { "type": "stdio", "command": "dotnet", "args": [ "fsi", "C:\\git\\mcp\\Server.fsx" ] } }, "inputs": [] } *)