Build1 distinct publisher3 min readUpdated
One developer found seven dead MCP connections and could not say when they broke. His answer was measurement: a weekly snapshot that turns "feels slow lately" into a dated diff.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A developer writing on dev.to has published his fix for a problem most operators feel but cannot date: a 70-line bash script plus a launchd job, two files in total, that snapshot a Claude Code environment every week [1]. The job, com.shun.env-audit, fires at 09:00 each Sunday and runs the script [2]. It matters because every failure mode he catalogues is a silent one.
An MCP server whose auth token has expired does not announce itself. It sits in the config reading Failed to connect, indefinitely [3]. A plugin's command files can stay on disk after the plugin itself is gone from enabledPlugins in settings.json [4]. An auto-skill written as a good-enough-for-now procedure is still in ~/.claude/skills/auto/ six months later, loaded on every run [5].
The case for treating this as performance rather than tidiness rests on the context window being finite. According to the author, the total volume of settings, skills and hooks loaded at startup directly affects the quality of the first response [6]. Enable 50 plugins and their metadata rides along in context every time [7]. Leave 10 MCP servers stuck at Failed and connection-attempt timeouts stretch startup [8].
His own incident is the useful part. Three months into serious use, one week's first response was noticeably sluggish, and claude mcp list returned seven Failed to connect lines [9]. Five of the seven he had no memory of installing; they had been added automatically by plugins [10]. That is roughly 71 percent of the broken surface arriving without a human decision [11]. If plugins can install MCP servers, your dependency count is not something you can recall from memory.
He frames the cost plainly: three weeks running with a broken connection is cumulative minutes of timeout waiting, on a problem that takes 10 seconds to fix once you notice it [12].
Detection is the whole design. Reports accumulate as ~/.claude/logs/env-audit-YYYYMMDD.md, so a diff dates the regression instead of describing it [13]. His argument for automating rather than watching: daily use raises your own threshold for "heavy", so something 20 percent slower than three months ago just becomes normal, and without weekly snapshots there is no baseline to compare against [14].
What the script counts is unremarkable, which is the point. jq reads the length of enabledPlugins out of settings.json, and find counts the command files, SKILL.md files and agent files actually present under ~/.claude/plugins [15]. Then claude mcp list runs under a 25-second timeout with Connected, Needs auth and Failed tallied, jq dumps the hooks config, ls lists the auto-skills, and ccusage blocks --active pulls recent cost [16]. The gap between the enabledPlugins count and the on-disk file count is his zombie-file indicator [17], and he is careful to note those orphaned files do not themselves consume context [18].
Two things to watch. First, cadence. Weekly bounds worst-case time-to-detect at seven days [19], which is tolerable for token waste and expensive if an expired token is blocking work you need done Monday. Second, whether agent runtimes begin reporting startup context load and failed-connection counts as first-class output. Until they do, the instrumentation is a shell script you maintain yourself, writing to /tmp/claude-env-audit.md unless the scheduler hands it a date-stamped path [20].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
An MCP server whose auth token has expired will sit in the config as Failed to connect forever.
A plugin's command files can still be on disk while the plugin is gone from enabledPlugins in settings.json.
An auto-skill written as a good-enough-for-now procedure can still be sitting in ~/.claude/skills/auto/ six months later, with the author paying the context tax of Claude loading it every single time.
The author built a weekly health check for his Claude Code environment consisting of two files: a 70-line diagnostic script (~/.claude/scripts/env-audit.sh) and a launchd job config that fires it weekly.
The launchd job com.shun.env-audit is started every Sunday at 09:00 and executes ~/.claude/scripts/env-audit.sh.
Three months into using Claude Code seriously, and after repeatedly adding MCPs for convenience, the author found one week that Claude's first response was noticeably sluggish; investigating, he found seven Failed to connect lines in the output of claude mcp list.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single self-reported practitioner account with reproducible snippets but no measurements
One publisher, one first-person post. The tooling and the triggering incident are described concretely enough to reproduce (paths, launchd trigger, jq/find/grep code, 25-second timeout), which is genuine evidence for what was built. Everything about the cost being avoided -- context load, startup timeouts, 20 percent slowdown, cumulative minutes lost -- is asserted without token counts, timings, vendor documentation or independent corroboration.
One developer's personal workstation
Adoption evidence is limited to the author's own environment: one macOS machine, one weekly launchd job, one disclosed inventory of failing MCP servers and auto-skills. No repository, star count, downloads, third-party users or organizational rollout is reported.
Concrete tooling, overstated cost narrative
The artifact itself is modestly framed and matches what is shown. The surrounding argument runs ahead of the evidence: a 'latency bill', degraded first responses, minutes lost to timeouts and a 20 percent drift are all asserted without measurement, and the article contradicts part of its own dead-weight framing by conceding that on-disk leftovers cost no context. Gap is positive but small, because the author never claims generality beyond his own machine.
Self-published practitioner advocacy for own workflow
The single source is a developer-platform post in which the author advocates tooling and habits he built, with a passing reference to his growing revenue as context for adding MCP servers. That is a mild promotional incentive toward a tidy narrative, but there is no disclosed vendor relationship, sponsorship, paid product or funding stake in the cluster.
Confident about the artifact, not about its payoff
High confidence that the script, schedule and incident are described as they happened, and that a weekly cadence bounds detection at seven days. Low confidence in the generalized performance claims and in any transferability beyond one macOS developer, given a single source and zero measurement.
product
A 2x LLM bill is not a bug report: token spend is an observability problem1 distinct publisher
build
A Retention Policy for Agent Memory: Flag Unused Skills at 30 Days, Archive at 901 distinct publisher
build
26 launchd jobs, one log directory: how scheduled automation rots quietly1 distinct publisher
build
Anthropic's CCAR-F puts a scaled score on "can build agents"1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 17, 2026