From bc9476e6f74f657dbe38faf4a692aa2de1d35ce7 Mon Sep 17 00:00:00 2001 From: Yuliia Kovalova Date: Tue, 16 Jun 2026 19:14:04 +0200 Subject: [PATCH] Install Microsoft.AITools.BinlogMcp from nuget.org The Microsoft.AITools.BinlogMcp package is now published on nuget.org as stable 1.0.0, so the extension no longer needs the dnceng AzDO dotnet-tools feed or the --prerelease flag to install/update the MCP server tool. - extension.ts: remove the DOTNET_TOOLS_FEED constant; drop --prerelease and --add-source from all tool install/update/search commands and the manual install hint (nuget.org is the default source) - README.md: update package links to the nuget.org page and simplify the manual install command Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 14 +++++++------- src/extension.ts | 18 ++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 5a3d765..b90816c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Analyze MSBuild binary logs (`.binlog`) with **GitHub Copilot Chat** and **MCP t @binlog /perf ``` -The [Microsoft.AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/Microsoft.AITools.BinlogMcp) server (28 analysis tools) is auto-installed on first use. +The [Microsoft.AITools.BinlogMcp](https://www.nuget.org/packages/Microsoft.AITools.BinlogMcp) server (28 analysis tools) is auto-installed on first use. ## What You Get @@ -52,12 +52,12 @@ The [Microsoft.AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts ## Troubleshooting: MCP Server Installation -The extension auto-installs [Microsoft.AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/Microsoft.AITools.BinlogMcp) via `dotnet tool install -g`. In corporate environments with restricted NuGet feeds, this may fail. Here are the workarounds: +The extension auto-installs [Microsoft.AITools.BinlogMcp](https://www.nuget.org/packages/Microsoft.AITools.BinlogMcp) via `dotnet tool install -g`. In corporate environments with restricted NuGet feeds, this may fail. Here are the workarounds: -### 1. Install with explicit feed source +### 1. Install manually ```bash -dotnet tool install -g Microsoft.AITools.BinlogMcp --prerelease --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json +dotnet tool install -g Microsoft.AITools.BinlogMcp ``` ### 2. Diagnose NuGet issues @@ -67,9 +67,9 @@ dotnet nuget list source ``` Common problems: -- **dotnet-tools feed not configured** — the tool is published on the dotnet-tools Azure DevOps feed +- **nuget.org not configured** — the tool is published on nuget.org, the default NuGet feed - **Authenticated feed requires credentials** — may block access to the feed -- **Package source mapping** excludes the dotnet-tools feed for this package +- **Package source mapping** excludes nuget.org for this package ### 3. Verify installation @@ -81,7 +81,7 @@ binlog-mcp --help ## Related Projects - [MSBuild Structured Log Viewer](https://github.com/KirillOsenkov/MSBuildStructuredLog) — WPF viewer with secrets redaction -- [Microsoft.AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/Microsoft.AITools.BinlogMcp) — MCP server for binlog analysis +- [Microsoft.AITools.BinlogMcp](https://www.nuget.org/packages/Microsoft.AITools.BinlogMcp) — MCP server for binlog analysis - [MSBuild Binary Log docs](https://learn.microsoft.com/en-us/visualstudio/msbuild/obtaining-build-logs-with-msbuild#save-a-binary-log) ## License diff --git a/src/extension.ts b/src/extension.ts index 8700b3a..dd13a09 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -30,7 +30,6 @@ let extensionContext: vscode.ExtensionContext | undefined; let openedViaUri = false; let optimizeInProgress = false; let cachedMcpExePath: string | null | undefined; // undefined = not searched yet -const DOTNET_TOOLS_FEED = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'; let codeLensRegistered = false; function escapeHtml(s: string): string { @@ -2140,11 +2139,11 @@ async function configureMcpServer(binlogPaths: string[], config: vscode.Workspac ...(workspaceCwd && { cwd: workspaceCwd }), }; vscode.window.showWarningMessage( - 'Could not find or install Microsoft.AITools.BinlogMcp. Install it manually: `dotnet tool install -g Microsoft.AITools.BinlogMcp --prerelease --add-source ' + DOTNET_TOOLS_FEED + '`', + 'Could not find or install Microsoft.AITools.BinlogMcp. Install it manually: `dotnet tool install -g Microsoft.AITools.BinlogMcp`', 'Copy Command' ).then(sel => { if (sel === 'Copy Command') { - vscode.env.clipboard.writeText('dotnet tool install -g Microsoft.AITools.BinlogMcp --prerelease --add-source ' + DOTNET_TOOLS_FEED); + vscode.env.clipboard.writeText('dotnet tool install -g Microsoft.AITools.BinlogMcp'); } }); } @@ -2315,9 +2314,8 @@ async function getLatestNuGetVersion(): Promise { const cp = require('child_process'); return new Promise((resolve) => { - // Search the dotnet-tools feed for the package (includes prereleases) - cp.execFile('dotnet', ['package', 'search', NUGET_PACKAGE_ID, '--exact-match', '--format', 'json', '--prerelease', - '--source', DOTNET_TOOLS_FEED], + // Search nuget.org for the package + cp.execFile('dotnet', ['package', 'search', NUGET_PACKAGE_ID, '--exact-match', '--format', 'json'], { timeout: 30000, encoding: 'utf8' }, (error: any, stdout: string) => { if (error) { @@ -2366,7 +2364,7 @@ async function updateMcpServer() { const result = await vscode.window.withProgress( { location: vscode.ProgressLocation.Notification, title: 'Updating Microsoft.AITools.BinlogMcp MCP server...' }, () => new Promise<{ success: boolean; output: string }>((resolve) => { - cp.execFile('dotnet', ['tool', 'update', '-g', 'Microsoft.AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => { + cp.execFile('dotnet', ['tool', 'update', '-g', 'Microsoft.AITools.BinlogMcp'], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => { resolve({ success: !err, output: (stderr || stdout || '').toString() }); }); }) @@ -2406,7 +2404,7 @@ async function applyPendingToolUpdate(): Promise { const result = await vscode.window.withProgress( { location: vscode.ProgressLocation.Notification, title: 'Updating Microsoft.AITools.BinlogMcp MCP server...' }, () => new Promise<{ success: boolean; output: string }>((resolve) => { - cp.execFile('dotnet', ['tool', 'update', '-g', 'Microsoft.AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => { + cp.execFile('dotnet', ['tool', 'update', '-g', 'Microsoft.AITools.BinlogMcp'], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => { resolve({ success: !err, output: (stderr || stdout || '').toString() }); }); }) @@ -2585,9 +2583,9 @@ async function installMcpTool(): Promise { const result = await vscode.window.withProgress( { location: vscode.ProgressLocation.Notification, title: 'Installing Microsoft.AITools.BinlogMcp MCP server (dotnet tool)...' }, () => new Promise((resolve) => { - cp.execFile('dotnet', ['tool', 'install', '-g', 'Microsoft.AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, (err: Error | null) => { + cp.execFile('dotnet', ['tool', 'install', '-g', 'Microsoft.AITools.BinlogMcp'], { timeout: 60000 }, (err: Error | null) => { if (err) { - cp.execFile('dotnet', ['tool', 'update', '-g', 'Microsoft.AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, () => { + cp.execFile('dotnet', ['tool', 'update', '-g', 'Microsoft.AITools.BinlogMcp'], { timeout: 60000 }, () => { const exe = findMcpTool(); telemetry.trackToolInstall(!!exe); resolve(exe);