TomLabs Apps
← All applications

BuildWatch

Dashboard of GitHub Actions and Azure DevOps builds with an MCP server for Claude

windows ci github azure-devops mcp claude Personal

BuildWatch

Desktop dashboard of GitHub Actions and Azure DevOps builds with a local MCP server, so Claude can see what is building, read the logs of what broke and re-run it — without leaving the conversation.

BuildWatch

What it does

  • Auto-discovery. Give it a GitHub user/organisation and/or an Azure DevOps organisation; every repository with workflow runs and every build definition becomes a pipeline. Sources are grouped in workspaces (e.g. Personal and Work) that the sidebar can filter by, so work and personal builds live in one window but never mix. Everything runs on your workstation — tokens never leave it.
  • Dashboard. Sidebar with status dots (green / red / pulsing blue for running), "failed and running only" filter, Ctrl+K command palette. Per pipeline: recent runs with branch, commit, trigger and duration; success rate and average duration; jobs and steps of a run with their log (tail, regex grep, "errors only"). Actions: re-run failed jobs, re-run all, cancel, queue a new build, open in browser.
  • MCP server for Claude. Kestrel on 127.0.0.1:5199 (streamable HTTP, optional bearer token) with the tools below. GET /health reports the running version and the state of every source.
  • Self-updating, System / Light / Dark theme (Ctrl+Shift+L cycles), application log in the UI — as every TomLabs desktop app. Closing the window hides it to the tray (the MCP server keeps running); exit from the tray menu.

Connecting Claude

The server runs while BuildWatch is open. Add it once to Claude Code (the MCP page in the app has the command with the right port and token, plus a Copy button):

claude mcp add --transport http buildwatch http://127.0.0.1:5199/mcp

Tools:

Tool What it does
list_pipelines Monitored pipelines with the status of their latest run; filter by workspace, name or status (failed, running, …).
list_runs Recent runs of one pipeline: number, status, branch, commit, trigger, timing.
get_run Jobs and steps of a run with statuses, durations, error messages and logRefs.
get_failed_steps Failed jobs/steps of a run with the error lines extracted from their logs — start here for a broken build.
get_log Plain-text log of a job or step: last N lines, or grep with context.
rerun_build Re-run a finished run — failed jobs only (default) or everything.
cancel_build Cancel a queued or running run.
queue_build Start a new run of a pipeline on a branch (GitHub needs workflow_dispatch).
refresh Poll all sources now, optionally discovering new repositories/projects.

Ids are stable and readable: pipelines gh:owner/repo/build.yml · ado:org/project/42, runs gh:owner/repo#123456 · ado:org/project#811. A typical conversation: "which of my builds are red?" → list_pipelines status=failed → get_failed_steps → fix → rerun_build.

Configuration

Settings live in %APPDATA%\BuildWatch\settings.json and are edited on the Settings page:

  • Sources — provider, owner/organisation, personal access token (stored DPAPI-encrypted for your Windows account), workspace, optional project filter (Azure DevOps) and ignore list. Test checks the token. GitHub: a fine-grained PAT with Actions: read and write on the repositories (write is what re-run and cancel need); Azure DevOps: Build: read & execute.
  • Polling — interval (default 60 s, 20 s while a run is active; GitHub polling uses conditional requests, so unchanged repositories cost no rate limit), runs kept per pipeline, log level.
  • MCP server — enabled, port, optional bearer token.

Endpoints

Path Purpose
POST /mcp MCP (streamable HTTP, stateless).
GET /health { "status": "Healthy", "version": "0.1.0", "name": "buildwatch", "entries": { "gh:TomasBouda": {…} } } — Degraded when a source fails.
GET /api/logs, /api/logs/recent, /api/logs/{file} Log files, the in-memory ring buffer and a file tail.

Development

dotnet build BuildWatch.slnx
dotnet test tests/BuildWatch.Tests/BuildWatch.Tests.csproj
dotnet run --project src/BuildWatch.App/BuildWatch.App.csproj
  • src/BuildWatch.Core — models, the GitHub and Azure DevOps providers, the polling monitor, settings, logging.
  • src/BuildWatch.Server — ASP.NET Core host: MCP tools, /health, log API.
  • src/BuildWatch.App — Avalonia UI (ops-console style shared with IISBlitz).
  • Self-update library: TomLabs.AutoUpdate.Avalonia from nuget.org.

Logs: %LOCALAPPDATA%\BuildWatch\logs\buildwatch-<date>.log (14 days), also on the Application log page.

Releases

azure-pipelines.yml tests the solution and publishes the portable single-file exe to the TomLabs app store: pushes to master feed the nightly channel, v* tags the stable channel. The app updates itself from there; the channel can be switched from the command palette. Bump VersionPrefix in Directory.Build.props and add a section to CHANGELOG.md with every release.

Changelog

All notable changes to BuildWatch, newest first.

0.1.2 — 2026-09-24

Changed

  • The self-update library comes from nuget.org (TomLabs.AutoUpdate 0.3.2) instead of a git submodule; updates work as before.

0.1.1 — 2026-09-24

Added

  • The header button shows the current theme mode (half circle = System, sun, moon); the command palette can set each mode directly.

Changed

  • The theme switch (header, Ctrl+Shift+L) now cycles System / Light / Dark; System follows Windows live. Earlier Light/Dark choices were reset to System once.

0.1.0 — 2026-09-17

Added

  • Dashboard of GitHub Actions workflows and Azure DevOps build definitions: auto-discovery of every repository / project of the configured sources, sidebar with status dots, workspace filter (e.g. Personal / Work), "failed and running only" filter and a Ctrl+K command palette.
  • Per pipeline: recent runs with status, branch, commit, trigger and duration; success rate and average duration; jobs and steps of a run with their logs (tail, regex grep, "errors only").
  • Actions: re-run failed jobs, re-run all, cancel, queue a new build, open in browser.
  • Local MCP server (streamable HTTP on 127.0.0.1) for Claude with the tools list_pipelines, list_runs, get_run, get_failed_steps, get_log, rerun_build, cancel_build, queue_build and refresh; optional bearer token; MCP page with the claude mcp add command and recent calls.
  • GET /health with the running version and the state of every source, and a log API.
  • Settings page: sources with DPAPI-protected tokens and a connection test, poll interval, server port.
  • Application log page (live events with level/text filter, daily files with tail) and light/dark mode.
  • Closing the window hides BuildWatch to the notification area (tray menu: open, check for updates, exit; switchable in Settings), loading indicator while sources are polled or discovered.
  • Self-update through the TomLabs app store (stable and nightly channels).