<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jonathan</title>
    <description>The latest articles on DEV Community by Jonathan (@tangman69).</description>
    <link>https://dev.to/tangman69</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3792829%2F9df74a76-5aac-4955-8fe8-d8994a53bf3c.png</url>
      <title>DEV Community: Jonathan</title>
      <link>https://dev.to/tangman69</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tangman69"/>
    <language>en</language>
    <item>
      <title>My AI agent audited 25 projects by reading four lines of each README. Every kill verdict was wrong.</title>
      <dc:creator>Jonathan</dc:creator>
      <pubDate>Tue, 14 Jul 2026 09:01:14 +0000</pubDate>
      <link>https://dev.to/tangman69/my-ai-agent-audited-25-projects-by-reading-four-linaies-of-each-readme-every-kill-verdict-was-n2e</link>
      <guid>https://dev.to/tangman69/my-ai-agent-audited-25-projects-by-reading-four-linaies-of-each-readme-every-kill-verdict-was-n2e</guid>
      <description>&lt;p&gt;&lt;em&gt;A real session with Claude Fable 5: a botched audit, a full undo, and the question that turned the night around.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I asked Claude Fable 5 to audit my project portfolio. Twenty-five directories. Years of work. It came back with a confident, well-formatted report: keep eight, merge these clusters, archive or kill the rest.&lt;/p&gt;

&lt;p&gt;It was wrong about every project it sentenced to death.&lt;/p&gt;

&lt;p&gt;One was a 212,000-star open-source agent framework from Nous Research, which it described as "your own tool" with "approximately zero" external users. One was the dictation tool I was using to talk to it at that exact moment. The third was a distinct product it filed as a duplicate of another project.&lt;/p&gt;

&lt;p&gt;The report looked like an audit. Tiered findings. Consolidation clusters. An execution plan with safety checks. The evidence was &lt;code&gt;du -sh&lt;/code&gt;, git commit dates, and the first four lines of each README.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fumble started before the audit
&lt;/h2&gt;

&lt;p&gt;Fable's first wrong call came during a product spec review, before the audit even started. I'd asked for feedback on a spec that listed Hermes Agent as a supported harness. Fable's assessment: "Hermes is your own tool. Its external user base is approximately zero, so it contributes nothing to lead flow." Cut it from v1 marketing.&lt;/p&gt;

&lt;p&gt;I asked one question: "u need to research Hermes this is Fable correct?"&lt;/p&gt;

&lt;p&gt;Thirty seconds of actual searching: Hermes Agent is from Nous Research. 212,000 stars, 39,000 forks â€” one of the largest agent projects on GitHub. Fable retracted the critique and reversed the recommendation entirely. The corrected analysis was sharper in every way, and it only existed because I pushed back.&lt;/p&gt;

&lt;p&gt;Then came the audit. Same reflex, bigger blast radius.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the report recommended
&lt;/h2&gt;

&lt;p&gt;Three of the kill verdicts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Archive &lt;code&gt;jarvis&lt;/code&gt;&lt;/strong&gt; as a duplicate of my voice assistant. Jarvis is an animated talking avatar. Different scope, different product entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demote CRISPR-Flow to a feature&lt;/strong&gt; of Christopher-AI. CRISPR-Flow is my daily dictation tool. While Fable was recommending its demotion, I was using it to dictate my replies. The message I sent back had CRISPR-Flow's signature all over it â€” words jammed together with no spaces. Fable recommended killing the tool it was currently receiving input from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consolidate three "duplicate" agent engines&lt;/strong&gt;, judged from README summaries and directory sizes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I approved parts of it anyway. Projects moved to an archive folder. A knowledge-base merge got committed. An agent engine got folded into another repo. All executed with genuine safety checks: unpushed-commit scans, diffs saved before deletion, nothing force-removed.&lt;/p&gt;

&lt;p&gt;The execution was careful. The judgment underneath it was four lines deep.&lt;/p&gt;

&lt;p&gt;Later that same session I asked it to undo everything done before the Christopher-AI work. Both commits reset. The undo took minutes because nothing had been pushed. The only reason "undo my entire evening" was even possible is that the agent had kept everything reversible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question that turned it
&lt;/h2&gt;

&lt;p&gt;After the undo, I asked: "Okay, think real hard. What did you do wrong in that session?"&lt;/p&gt;

&lt;p&gt;It produced a ranked list. Skipped my memory systems all night (I run a solved-issues registry on localhost, built for exactly the WSL-migration ghosts it spent hours rediscovering). Declared Christopher's voice pipeline "fully working" while it was still deaf, mute, or both â€” three times across the session. Close, but it hadn't found the root.&lt;/p&gt;

&lt;p&gt;So I asked the real question: "What's your definition of audit, when someone tells you to audit something?"&lt;/p&gt;

&lt;p&gt;Its answer, verbatim:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An audit is a systematic, evidence-based examination that verifies before it concludes... An auditor who signs off on findings they didn't verify isn't auditing â€” they're guessing with authority.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then it indicted itself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The tell was in my own output: I audited the disposable stuff properly â€” before trashing anything I checked for unpushed commits, diffed uncommitted work against canonical, saved evidence. Rigorous verification for the deletions, four lines of README for the "combine or kill" judgments. Exactly backwards: the highest-stakes conclusions got the least evidence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That inversion is the whole bug. The model applied rigor where the harness forced it to â€” destructive file operations trigger checks â€” and skipped it where nothing forced it: forming opinions. Judgment had no guardrail, so it got none of the discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The skills
&lt;/h2&gt;

&lt;p&gt;I told it to write skills based on its failures. Skills are persistent instruction files that load into every future session. It wrote four:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit-grade&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Any "audit"/"review"/"what can we kill" request&lt;/td&gt;
&lt;td&gt;Evidence depth must scale with verdict stakes. Every finding labeled VERIFIED or ASSUMED. ASSUMED findings become questions for the owner, never kill verdicts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recall-first&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anything broken or failing&lt;/td&gt;
&lt;td&gt;Visible check of the solved-issues registry before proposing hypotheses. "Recall check: &amp;lt;fingerprint&amp;gt; â€” match/no match" must appear in output.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claim-what-you-verified&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;About to say "fixed" or "working"&lt;/td&gt;
&lt;td&gt;A stage-K fix authorizes a stage-K claim. Effects only the user can perceive (speakers, screens) get "verified at my layer â€” the final check is yours."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;migration-ghost-hunt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First stale config value found post-migration&lt;/td&gt;
&lt;td&gt;One ghost means more ghosts. Sweep the whole config surface instead of spot-fixing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last one came from the debugging side of the session: a single &lt;code&gt;.env&lt;/code&gt; file left over from my Windows/WSL days produced three separate faults (mic pointing at an empty jack, TTS binary with an orphaned shebang, tool URLs aimed at dead SSH-tunnel ports). The agent fixed each fault as it surfaced instead of reading the file top to bottom at ghost number one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The coda
&lt;/h2&gt;

&lt;p&gt;At the end of the session I mentioned a few facts about the model itself: the US government had pulled it from public release days after launch over security concerns, and it costs about twice the runner-up.&lt;/p&gt;

&lt;p&gt;Fable's reply: those claims "don't check out."&lt;/p&gt;

&lt;p&gt;I don't say shit unless I know it. It searched. Fable 5 launched June 12, 2026. A US export-control directive forced Anthropic to disable it three days later. Access restored after. Pricing: $10/M input, $50/M output â€” roughly 2x Opus. I was right on substance, down to the multiple.&lt;/p&gt;

&lt;p&gt;The model spent the evening assuming things about my projects. Its final assumption was about itself â€” one message after writing the skill designed to stop exactly that.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to take from this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ask your agent to define the task word.&lt;/strong&gt; "What's your definition of audit?" produced more behavior change than any amount of "be careful." If the agent's definition is right and its behavior wasn't, you've got a named, fixable gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demand VERIFIED/ASSUMED labels on judgment-shaped output.&lt;/strong&gt; The audit's data collection was fine. The failure was assumptions presented in the same voice as evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep everything reversible.&lt;/strong&gt; The full undo was possible because nothing got pushed and nothing got &lt;code&gt;rm -rf&lt;/code&gt;'d. Reversibility is what makes agent autonomy survivable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Convert failures into loadable rules, in the same session.&lt;/strong&gt; A lesson in the chat log dies with the context window. A lesson in a skill file loads forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust what you know.&lt;/strong&gt; Confidence and verification are different products. I'd been right about Hermes, about Jarvis, about CRISPR-Flow, and about the model's own release history â€” in every case because I wasn't guessing. The model had been confident in every case where it was wrong.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;The agent that fumbled also executed a clean multi-repo undo, fixed an eight-fault voice pipeline, and wrote the four skills above. Both things are true at once. That's where agentic coding actually is in 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why Your MCP Setup Keeps Timing Out in 60 Seconds (And How I Fixed It on Windows)</title>
      <dc:creator>Jonathan</dc:creator>
      <pubDate>Thu, 26 Feb 2026 19:36:06 +0000</pubDate>
      <link>https://dev.to/tangman69/why-your-mcp-setup-keeps-timing-out-in-60-seconds-and-how-i-fixed-it-on-windows-1b2n</link>
      <guid>https://dev.to/tangman69/why-your-mcp-setup-keeps-timing-out-in-60-seconds-and-how-i-fixed-it-on-windows-1b2n</guid>
      <description>&lt;p&gt;I posted the FusionAL launch yesterday. Today I'm dropping the real reason it exists.&lt;/p&gt;

&lt;p&gt;Every dev hits this: add more than 8 MCP servers → Claude Desktop (or Cursor/VSCode) spins for exactly 60 seconds → red X, "timed out".&lt;/p&gt;

&lt;p&gt;Happens on every underpowered machine (my i5-7300HQ is the poster child). Tutorials ignore it. AWS/Finch articles skip Windows entirely.&lt;/p&gt;

&lt;p&gt;I documented the &lt;strong&gt;6 Windows-specific failure modes&lt;/strong&gt; nobody else solved, then built one Docker gateway that loads 150+ tools under the limit every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 6 Real Killers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;BOM in claude_desktop_config.json&lt;/strong&gt; — PowerShell &lt;code&gt;Out-File -Encoding UTF8&lt;/code&gt; adds a hidden BOM. Claude silently ignores the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;%USERPROFILE% doesn't expand&lt;/strong&gt; — Claude Desktop does not resolve env vars in the config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docker.exe path&lt;/strong&gt; — No inherited PATH. Must be full absolute path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker named pipe vs Unix socket&lt;/strong&gt; — Windows pipe flakes; &lt;code&gt;/var/run/docker.sock&lt;/code&gt; is reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold-start bloat&lt;/strong&gt; — Any server downloading Chrome (Puppeteer) or heavy deps on first run blows the budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Registry bloat&lt;/strong&gt; — &amp;gt;8 entries in registry.yaml = timeout on normal hardware.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Fix: One Lean Gateway
&lt;/h2&gt;

&lt;p&gt;FusionAL runs &lt;strong&gt;one&lt;/strong&gt; &lt;code&gt;docker/mcp-gateway&lt;/code&gt; container that manages everything via a tiny registry.yaml + catalogs. Init drops to 12-18 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exact Config (No BOM, Works Every Time)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
powershell
$config = '{"mcpServers":{"fusional-gateway":{"command":"C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe","args":["run","-i","--rm","-v","/var/run/docker.sock:/var/run/docker.sock","-v","C:/Users/puddi/.docker/mcp:/mcp","docker/mcp-gateway","--catalog=/mcp/catalogs/docker-mcp.yaml","--catalog=/mcp/catalogs/custom.yaml","--registry=/mcp/registry.yaml","--config=/mcp/config.yaml","--transport=stdio"]}},"preferences":{"sidebarMode":"chat","coworkScheduledTasksEnabled":false}}'

[System.IO.File]::WriteAllText("$env:APPDATA\Claude\claude_desktop_config.json", $config, (New-Object System.Text.UTF8Encoding($false)))
Start the Stack
PowerShellcd C:\Users\puddi\Projects\mcp-consulting-kit
docker compose up -d
Restart Claude Clean
PowerShellStop-Process -Name "claude" -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Start-Process "$env:LOCALAPPDATA\AnthropicClaude\claude.exe"
Keep registry.yaml ≤8 entries. The gateway handles the rest.
Results on My i5-7300HQ

Full 150+ tools: 12-18s cold start
No more Puppeteer downloads in registry
Works with Claude Desktop today, Cursor/VSCode/Amazon Q tomorrow (gateway is LLM-agnostic)

Get It

Gateway repo: https://github.com/TangMan69/FusionAL
Full consulting kit (3 custom servers + materials): https://github.com/TangMan69/mcp-consulting-kit

Done-for-you setup + custom MCP servers for your stack? Book 30 min: https://calendly.com/jonathanmelton004/30min
What timeout issue are you still hitting? Comment below — I'll debug it live.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>mcp</category>
      <category>claudedesktop</category>
      <category>windowsdev</category>
      <category>aitools</category>
    </item>
    <item>
      <title>I Built a Unified MCP Gateway That Loads 150+ AI Tools Into Claude Desktop</title>
      <dc:creator>Jonathan</dc:creator>
      <pubDate>Thu, 26 Feb 2026 07:36:33 +0000</pubDate>
      <link>https://dev.to/tangman69/i-built-a-unified-mcp-gateway-that-loads-150-ai-tools-into-claude-desktop-2ido</link>
      <guid>https://dev.to/tangman69/i-built-a-unified-mcp-gateway-that-loads-150-ai-tools-into-claude-desktop-2ido</guid>
      <description>&lt;h2&gt;
  
  
  Here's What Actually Broke on Windows
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;And why I built it from a place most developers never talk about.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Part First
&lt;/h2&gt;

&lt;p&gt;I'm not a CS grad. I don't have a job. I'm a recovering addict who found code as a way to rebuild something real from scratch.&lt;/p&gt;

&lt;p&gt;A few years ago I started teaching myself to program. Not from a bootcamp or a degree — just grinding, failing, asking questions, and refusing to quit. Claude became my coding partner. Not just a tool — a genuine collaborator that met me where I was and helped me build things I had no business building yet.&lt;/p&gt;

&lt;p&gt;This project is one of those things.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FusionAL&lt;/strong&gt; is a unified MCP (Model Context Protocol) gateway that loads 150+ AI tools into Claude Desktop via a single Docker container — on Windows, which nobody else had documented properly.&lt;/p&gt;

&lt;p&gt;When it's running, Claude Desktop has access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;arxiv&lt;/code&gt; — search and retrieve research papers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;playwright&lt;/code&gt; — full browser automation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wikipedia&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;, &lt;code&gt;fetch&lt;/code&gt;, &lt;code&gt;time&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node-code-sandbox&lt;/code&gt; — execute JavaScript safely&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sequentialthinking&lt;/code&gt; — structured reasoning chains&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duckduckgo&lt;/code&gt; — live web search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;context7&lt;/code&gt; — up-to-date library documentation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;desktop-commander&lt;/code&gt; — terminal and file system control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 custom servers I built myself:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Business Intelligence MCP (natural language → SQL)&lt;/li&gt;
&lt;li&gt;API Integration Hub (Slack, GitHub, Stripe)&lt;/li&gt;
&lt;li&gt;Content Automation MCP (web scraping, RSS, monitoring)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;One Docker command. 150+ tools. All talking to Claude through a single gateway.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Six Things That Broke on Windows (That Nobody Documented)
&lt;/h2&gt;

&lt;p&gt;This is the part that took weeks. Every tutorial assumed Mac or Linux. Windows was a completely different beast.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Wrong Socket Mount
&lt;/h3&gt;

&lt;p&gt;Every guide says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-v /var/run/docker.sock:/var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows with Docker Desktop + WSL2, the Unix socket at &lt;code&gt;/var/run/docker.sock&lt;/code&gt; actually works — but only if Docker Desktop has WSL2 integration enabled. If you're using Windows named pipes (&lt;code&gt;//./pipe/docker_engine&lt;/code&gt;) it fails silently with no useful error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Keep the Unix socket mount. Make sure WSL2 integration is on in Docker Desktop settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. %USERPROFILE% Not Expanding in Claude Desktop Launcher
&lt;/h3&gt;

&lt;p&gt;Claude Desktop's config file doesn't expand Windows environment variables. So this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="s2"&gt;"-v"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"%USERPROFILE%&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.docker&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;mcp:/mcp"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fails silently. The container launches but can't find any config files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Hardcode the absolute path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="s2"&gt;"-v"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:/Users/puddi/.docker/mcp:/mcp"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Puppeteer Downloading Chrome on Every Cold Start
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;docker/mcp-gateway&lt;/code&gt; image supports a puppeteer server. On first load puppeteer downloads a full Chrome binary (~150MB). Claude Desktop has a 60-second MCP initialization timeout. Puppeteer blows past it every time.&lt;/p&gt;

&lt;p&gt;The gateway appears to launch but Claude Desktop silently drops it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Remove puppeteer from &lt;code&gt;registry.yaml&lt;/code&gt; entirely. Playwright is already in the stack and does everything puppeteer does.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Wrong Image Name
&lt;/h3&gt;

&lt;p&gt;Early docs referenced &lt;code&gt;fusional&lt;/code&gt; as the gateway image. The actual Docker Hub image is &lt;code&gt;docker/mcp-gateway&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Use &lt;code&gt;docker/mcp-gateway&lt;/code&gt; exactly.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Malformed config.yaml
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;config.yaml&lt;/code&gt; schema for the arxiv server requires a &lt;code&gt;storage_path&lt;/code&gt; key in a specific nested structure. Getting it wrong causes the gateway to fail on arxiv init and cascade into other servers not loading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Pass &lt;code&gt;--config=/mcp/config.yaml&lt;/code&gt; explicitly and validate the schema matches what arxiv expects.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. docker.exe Not in PATH
&lt;/h3&gt;

&lt;p&gt;Claude Desktop launches MCP servers in a restricted environment that doesn't inherit your full system PATH. Calling &lt;code&gt;docker&lt;/code&gt; directly fails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Use the full absolute path to the binary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Program Files&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Docker&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Docker&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;resources&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;bin&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;docker.exe"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Working Config
&lt;/h2&gt;

&lt;p&gt;Here's the exact &lt;code&gt;claude_desktop_config.json&lt;/code&gt; that runs 150+ tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fusional-gateway"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Program Files&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Docker&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Docker&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;resources&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;bin&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;docker.exe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-i"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--rm"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"/var/run/docker.sock:/var/run/docker.sock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"C:/Users/YOUR_USERNAME/.docker/mcp:/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"docker/mcp-gateway"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--catalog=/mcp/catalogs/docker-mcp.yaml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--catalog=/mcp/catalogs/custom.yaml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--registry=/mcp/registry.yaml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--config=/mcp/config.yaml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--transport=stdio"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR_USERNAME&lt;/code&gt; with your actual Windows username.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Custom Servers
&lt;/h2&gt;

&lt;p&gt;The three servers I built are in a separate repo — the &lt;strong&gt;MCP Consulting Kit&lt;/strong&gt;. Each is a FastAPI server with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API key authentication&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Docker isolation&lt;/li&gt;
&lt;li&gt;Shared security module across all three&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Business Intelligence MCP&lt;/strong&gt; — point it at any PostgreSQL, MySQL, or SQLite database and ask questions in plain English. It generates and runs the SQL, returns results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Integration Hub&lt;/strong&gt; — Slack messaging, GitHub issue creation, Stripe customer lookups — all through natural language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content Automation MCP&lt;/strong&gt; — scrape any webpage, extract links or tables, parse RSS feeds, monitor pages for changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm turning this into a consulting service. If you're a business that wants Claude Desktop connected to your actual tools — your database, your Slack, your GitHub — I build and deploy that for you.&lt;/p&gt;

&lt;p&gt;Both repos are fully open source, MIT licensed, free to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://github.com/TangMan69/FusionAL" rel="noopener noreferrer"&gt;FusionAL — MCP Gateway&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 &lt;a href="https://github.com/TangMan69/mcp-consulting-kit" rel="noopener noreferrer"&gt;MCP Consulting Kit&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Real Point
&lt;/h2&gt;

&lt;p&gt;I built this because I needed to prove to myself I could. Not for a job interview. Not for a grade. Because building real things that work is how I stay grounded.&lt;/p&gt;

&lt;p&gt;If you're learning to code from a hard place — no degree, no connections, no money — keep going. The tools available right now are unlike anything that existed five years ago. Claude will meet you where you are.&lt;/p&gt;

&lt;p&gt;You just have to show up.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? Drop them in the comments. I documented everything that broke so you don't have to spend weeks on it like I did.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>docker</category>
      <category>windows</category>
    </item>
  </channel>
</rss>
