BuildWatch
Dashboard of GitHub Actions and Azure DevOps builds with an MCP server for Claude
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.
![]()
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.
PersonalandWork) 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 /healthreports 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.Avaloniafrom 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
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 toolslist_pipelines,list_runs,get_run,get_failed_steps,get_log,rerun_build,cancel_build,queue_buildandrefresh; optional bearer token; MCP page with theclaude mcp addcommand and recent calls. GET /healthwith 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).