MCP WatchdogKnow which MCP servers are responding — independent of what the editor still shows. The editor can still show tools after a server has gone quiet — after idle, sleep, or a network drop. MCP Watchdog is an independent check of the servers you approved. It shows status, latency, and failure details, then offers a next step. Works in Cursor, Windsurf, VS Code, VSCodium, and other forks that install from Open VSX. Host roadmap (Claude Code–class CLI later, not JetBrains-first): docs/STRATEGY-THESIS.md — Where Watchdog exists. Install (recommended for Cursor): MCP Watchdog on Open VSX — primary download channel for Cursor, Windsurf, VSCodium, and most VS Code forks. Repository: github.com/vaibhav11123/mcp-watchdog InstallInstall in Cursor (recommended)Most Cursor installs pull extensions from Open VSX, not the VS Marketplace:
All install channels
After install, reload the window. Open the activity bar MCP Watchdog icon (not the Extensions detail page). EditorWatchdog opens its own connection to each approved server. The status bar shows That result is Watchdog’s probe. It does not read the editor’s MCP client, so a green Watchdog row does not mean the editor’s own session is healthy. When a check fails, the next steps are separate:
Demo
Independent probe → cause sentence → Fix… → recovery. Prefer the Accept / Fix… / Remove story in docs/media/GIF-RECORDING.md when re-recording (no secret values in frames). The punchline worth sharing is Verified: after Fix — when the Overview shows the server came back. Watchdog Cloud (preview — optional)Cloud is not required for the editor product. The core customer path is still status bar + failure toast in Cursor/VS Code. If you self-host later: remote health checks, schema change alerts, and configuration policy checks with an audit trail (policy runs outside the MCP tool-call path). Opt-in via Requirements
Where is the UI?VS Code has two different sidebars:
Other extensions that “show UI when opened” usually either (1) open their own activity bar panel (GitLens, Docker, etc.), (2) add a Getting Started walkthrough (first install), or (3) use a webview in the sidebar. MCP Watchdog uses (1) + a walkthrough on first install. After install, run Help → Welcome → MCP Watchdog: Get started (walkthrough), or MCP Watchdog: Open Servers View. Quick start
ScreenshotsStatus bar — aggregate health (
Servers view — per-server state and last ping latency in the MCP Watchdog activity bar sidebar:
Example
|
| Setting | Default | Description |
|---|---|---|
pingIntervalMs |
30000 |
Ping cadence (ms). |
maxRetries |
5 |
Max reconnect attempts before marking failed. |
initialBackoffMs |
1000 |
First backoff after failure (ms). |
backoffMultiplier |
1.5 |
Backoff multiplier. |
maxBackoffMs |
30000 |
Backoff cap (ms). |
requireApproval |
true |
Prompt before connecting to configured MCP servers. |
probeMode |
interval |
interval = connect/ping/close each cycle; persistent = long-lived client (0.1.x behavior). |
perServer |
{} |
Per-server probeMode, pingIntervalMs, enabled overrides. |
pingTimeoutMs |
5000 |
Ping/probe timeout (ms). |
notify |
failures |
Toasts: failures (default), all (+ recovery), none. |
degradedAlertDelayMs |
60000 |
Wait before warning toast on sustained degraded state. |
diagnostics.enabled |
true |
mcp.json structure lint in the Problems panel. |
checkEmptyTools |
false |
After ping, tools/list → show tool count (advisory). |
detectToolDrift |
false |
Fingerprint tool names; info toast when the set changes (advisory). |
passiveHttpProbe |
false |
HTTP interval: HEAD/GET before MCP; reachable-but-MCP-fail → degraded advisory. |
reviewAfterRecoveries |
3 |
After N recoveries, ask once for an Open VSX/Marketplace review (0 = off). |
cloudBridge.enabled |
false |
Opt-in: POST names-only incidents to self-hosted Watchdog Cloud. |
cloudBridge.url |
"" |
Cloud base URL (e.g. http://127.0.0.1:8787). |
telemetry.enabled |
true |
Anonymous product usage via PostHog (allowlisted events). Also requires the editor’s telemetry setting. |
perServer.*.authProbe |
unset | Optional post-ping tools/call to verify credentials (may have side effects). |
Opt-in advisories
These never force a server into failed on their own:
checkEmptyTools— after a successful ping, calltools/listand show a tool count on Overview / tree.detectToolDrift— fingerprint sorted tool names; when the set changes, show an info toast viatoolDriftNote(kept out oflastErrorso healthy servers do not look failed).passiveHttpProbe— for HTTP servers in interval mode, HEAD/GET the URL before a full MCP connect; if the endpoint answers but MCP fails, mark degraded with an advisory message.
Alerts
When a server fails, Watchdog shows Accept, Fix…, Remove, Retry probe, Restart editor MCP (when workbench.mcp.* is available), Show Log, Reload Window, Quit Cursor, and Mute 1h. Accept quiets the chip without marking the server healthy; Mute only silences toasts for 1h. Retry probe only restarts Watchdog’s check. Set mcpWatchdog.notify to all to also get recovery toasts. Repeated failures within 10 minutes collapse into a single flapping warning.
Auth probe (opt-in)
Per-server mcpWatchdog.perServer.<name>.authProbe can call one MCP tool after a successful ping to verify credentials. Default: unset (read-only). May have side effects or cost — enable only when you understand the tool.
Probe modes
| Mode | Behavior | When to use |
|---|---|---|
| interval (default) | Each cycle connects, pings, then closes — no duplicate stdio process between checks. | Most servers; avoids leaving extra npx children running. |
| persistent | Keeps one MCP client open and pings on an interval. | Stateful servers that lose session state on disconnect (use deliberately). |
Settings changes apply within ~1s without reloading the window; mcp.json edits reload monitors via the file watcher.
Privacy & data
- Product telemetry (PostHog) is on by default (
mcpWatchdog.telemetry.enabled). Anonymous allowlisted events (activation, triage, commands) use a random install id — never env/header values, secrets, workspace paths, or raw error text. Setting is in Settings (search “telemetry”); also blocked when the editor’s telemetry setting is off. Dictionary:telemetry.json. - Watchdog monitors servers from merged mcp.json layers. Cursor may list additional editor/plugin MCPs that are not in those files; the status-bar
N/Mis healthy/total of Watchdog’s set. - Separate from telemetry: traffic to your configured MCP servers only (stdio / HTTP as in
mcp.json). - Opt-in Cloud bridge (
cloudBridge.enabled, default off) posts names-only incidents to your self-hosted Cloud (fail-soft if unreachable). - Do not commit secrets inside
mcp.jsonin shared repos; use environment variables or secret stores appropriate to your team.
Known limitations
- Reads workspace
.vscode/mcp.json/.cursor/mcp.jsonfrom all multi-root folders (later folders override same server names), plus globals~/.cursor/mcp.json, VS Code usermcp.json, Windsurfmcp_config.json, Claude Code~/.claude.json, and Claude Desktopclaude_desktop_config.json. Global${workspaceFolder}expands using the first folder only. - Independent of the editor’s MCP UI: native MCP may show different state until the next Watchdog ping.
- HTTP transport may combine SDK-level reconnection with Watchdog-level retries. SSE is supported via SDK
SSEClientTransportbut is deprecated upstream — prefer Streamable HTTP when possible. - Malformed
mcp.json: invalid JSON shows an error notification; fix the file and save. - Tool-drift fingerprints are name-only (no schema hash); passive HTTP is a light HEAD/GET, not a substitute for MCP health.
Troubleshooting
| Symptom | What to check |
|---|---|
| Servers view is empty | Open a folder (not just a file). Add .cursor/mcp.json (Cursor) or .vscode/mcp.json (VS Code). Use the activity bar MCP Watchdog icon, not the Extensions detail page. |
| No MCP Watchdog in Output / no status | Folder open? MCP config present? Try Developer: Show Running Extensions → MCP Watchdog activated. |
| No servers / 0/n | servers key missing or empty; path is wrong root in multi-root. |
| Connecting forever | npx/network blocked; stdio command wrong; HTTP URL/firewall. |
Ping failed: Not connected then retry |
Expected after killing a server or a network blip; Watchdog retries its own probe within your backoff settings. |
Problems on mcp.json |
Confirm mcpWatchdog.diagnostics.enabled is on. Fix invalid JSON, a missing servers/mcpServers root, or an entry with neither command nor url. |
| Auth required (HTTP 401) | Token or header on that HTTP/SSE server is missing or expired. Watchdog does not complete OAuth. |
Status bar Watchdog: untrusted |
Run MCP Watchdog: Review Trusted Servers (or click the status bar) and approve the servers you want monitored. |
See Screenshots above for the Marketplace / README visuals.
Development
npm install
npm run compile
npm run build
- Run Extension / Run Extension (mcp-watchdog-test workspace) from
.vscode/launch.json. - Fixture:
mcp-watchdog-test/(optional; not shipped in VSIX). - Headless smoke:
npm run smoke. - Start here (progress / routing): docs/STATUS.md — bird’s-eye phase, claim ladder, what to update next.
- Release train / soak: docs/RELEASE.md · Pre-ship testing: docs/TESTING.md.
- GTM role (Instinct): docs/GTM-ROLE.md · Guardrails: docs/GTM-GUARDRAILS.md · Comms: docs/GTM-COMMS.md · Publish checklist: docs/GTM-PUBLISH.md.
- Strategy thesis: docs/STRATEGY-THESIS.md — reliability + recovery intelligence; claim ladder; metric formulas.
- Target architecture: docs/TECHNICAL-ARCHITECTURE.md — Doctor, dual-truth, verified recovery (Phases 1–3).
- Bake-off method: docs/BAKE-OFF.md — pinned competitors + scenarios + dated results.
- Agent skills toolkit: docs/AGENT-SKILLS.md — allowlist + selective install; catalog browse-only (not bulk installs).
- Historical technical dump: docs/TECHNICAL.md — demoted; prefer CHANGELOG + code for shipped 0.x, ARCH for Doctor target.
- Execution bible: docs/EXECUTION.md · GTM/publish: docs/GTM-PUBLISH.md.
- Historical raise notes: docs/PRODUCT-DECISION.md (superseded for identity by STRATEGY-THESIS).
- Cloud self-host: packages/cloud/README.md.
- Validation notes: docs/CUSTOMER-VALIDATION.md.
See CHANGELOG.md.
Ship checklist (maintainers)
Progress board: docs/STATUS.md. Staged train + soak: docs/RELEASE.md. Pre-ship QA: docs/TESTING.md. Marketing sync + release map (0.5.7 → 0.5.9 → 0.6.0): docs/GTM-PUBLISH.md. Claims: docs/STRATEGY-THESIS.md.
- Complete RELEASE.md hard gates and TESTING.md
SIGN-OFF.mdREADY for this version (do not skip soak / collapse Unreleased into one blast). - Confirm the cut matches the release map (do not mix Doctor UI + verify + win in one patch without re-scoping the map).
- Record/update the live clip in docs/media/GIF-RECORDING.md when the failure→Fix→verify story changed; put it in
images/demo.gifbefore announce. - Bump
package.jsonversion (maintainer only) + move CHANGELOG Unreleased → versioned section (include Marketing claim-stage line from GTM template). - Update README / store description only for user-visible deltas; Open VSX link stays primary for Cursor.
npm test&&npx vsce package— confirmvsce lshas notest/,*.local.md,launch/,.agents/(npm testincludes lint + Prettier).- Set GitHub secrets:
VSCE_PAT,OVSX_PAT(see CONTRIBUTING.md). ./scripts/ship-release.shor push tagv*to run release.yml (same VSIX → Marketplace + Open VSX). Script waits for CI (ci.yml) green viascripts/wait-ci.sh— do not stop at Release-only green.- G0 smoke on published Cursor (Open VSX), then post
launch/drafts — claim stage must match thesis for this version.
export VSCE_PAT=... OVSX_PAT=... # one-time
./scripts/ship-release.sh
License
MIT — see LICENSE.
Security: see SECURITY.md.


