The off-IDE story most round-ups skip13 Fazm releases, April 3 to 27, 2026

April 2026 was the month MCP config left the editor and started running system-wide. The round-ups did not notice.

If you opened any guide titled along the lines of this one in late April 2026, you got the same shape. A grid of IDE updates: Cursor 0.46, Windsurf, Claude Code skill hooks, Aider 0.79. A grid of model launches: Opus 4.7 on April 14, GPT-5.4 on April 10, Gemini 3.1 Ultra on April 12. And then nothing about what happened to the rest of your computer. April was when consumer Mac AI agents shipped the same MCP and custom-endpoint primitives that pro IDEs shipped, and in at least one case (Fazm) the config file is the same JSON shape Claude Code uses, by design.

M
Matthew Diakonov
9 min read
line 5

Format mirrors Claude Code's mcpServers: { name: { command, args, env, enabled } }

Desktop/Sources/MCPServerManager.swift, comment block, Fazm v2.4.0 (April 20, 2026)

What every other round-up has, and what it leaves out

Read three or four of the existing pages on this question and you can almost guess the section list before you scroll. Cursor minor releases get a paragraph. Windsurf gets a paragraph. Claude Code skill hooks get a paragraph. Aider, Cline, Continue, get a paragraph each. Then a model section: Opus 4.7, GPT-5.4, Gemini 3.1 Ultra, Llama 4 Scout and Maverick, Gemma 4, DeepSeek V3.2. Then a token-pricing comparison and a short note on context windows. Then a CTA to a newsletter.

Useful, partial. The frame is the editor. The frame is wrong. Most knowledge work happens outside the editor, and the AI agent layer that operates on that surface is moving fast enough this month that it deserves its own paragraph at minimum. Here it gets the whole page, with file names and line numbers.

The specific claim: between April 3 and April 27, Fazm shipped 13 releases, two of which (v2.2.0 on April 11 and v2.4.0 on April 20) brought the dev-tool primitives MCP server config and custom OpenAI-compatible endpoint to a consumer Mac AI agent that operates on every app on the system. The MCP config file at ~/.fazm/mcp-servers.json is wire-compatible with Claude Code's mcpServers shape. That is a deliberate design choice, and it is documented in the source comment, not just in marketing.

The anchor: two config files, four fields per server, one outer wrapper

The fastest way to verify the wire-compat claim is to read the two files side by side. Per-server fields match: command, args, env, enabled. Top-level shape is a record keyed by server name. The only structural difference: Claude Code wraps the record in a mcpServers key; Fazm reads the bare record. So the migration is a JSON unwrap or a JSON wrap, depending on direction.

Same servers, two hosts

// ~/.claude/mcp.json (Claude Code)
// Same four fields per server, wrapped in mcpServers.
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/Documents"],
      "enabled": true
    },
    "linear": {
      "command": "npx",
      "args": ["-y", "@tacticlaunch/mcp-linear"],
      "env": { "LINEAR_API_KEY": "lin_api_..." },
      "enabled": true
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." },
      "enabled": true
    }
  }
}
9% lines fewer (no outer mcpServers wrapper)

If you want to see the loader yourself, the relevant span is acp-bridge/src/index.ts lines 1102 to 1137. The function reads the file, parses it as Record<string, ServerConfig>, iterates each entry, drops any with enabled: false, and pushes the rest into the servers array that goes to the Claude Agent SDK. The Swift side, Desktop/Sources/MCPServerManager.swift, is the editor for the same file from inside Settings. Both read and write the same shape.

The April 2026 release calendar, on the off-IDE side

Pulled straight from CHANGELOG.json in the Fazm repo. Thirteen releases across 25 days, with the two pivotal entries for this page (v2.2.0 on April 11 and v2.4.0 on April 20) bolded in the prose below.

1

April 3, v2.0.1

Pop-out chat windows, knowledge graph performance pass, push-to-talk mic in chat input, fixes for floating-bar overlay clipping, transcription fixes for non-English speakers. The first release of the month and the largest changelog of the run, 25 line items. Sets the tempo.

2

April 4 to 9, v2.0.6 through v2.1.3

A run of fast iteration on the chat surface. v2.0.6 on April 4 auto-accepts chat observer cards and adds a Smart/Fast model toggle in the chat header. v2.0.7 and v2.0.9 on April 5 fix silent failures: chat falling back to the built-in account when a personal Claude account lacks model access, error messages surfacing when credits exhaust. v2.1.2 on April 7 upgrades the ACP protocol to v0.25.0 with better credit-exhaustion handling. v2.1.3 on April 9 adds a Manage Subscription button.

3

April 11, v2.2.0

First of the two pivotal releases for this page. Adds a custom API endpoint setting for proxies and corporate gateways. The same field doubles as the entry point for local LLM bridges, which v2.4.2 on April 26 makes explicit in the help text. Also adds a Cmd+Shift+N global shortcut to open a new pop-out chat window from anywhere.

4

April 16, v2.3.2

Tightens privacy language in onboarding and system prompts to say local-first instead of nothing leaves your device, an honest correction. Fixes AI responses leaking between pop-out chat windows when streaming simultaneously and onboarding chat splitting AI messages into multiple bubbles.

5

April 20, v2.4.0

The other pivotal release. Adds custom MCP server support via ~/.fazm/mcp-servers.json with a Settings UI to add, edit, and toggle servers. Available AI models now populate dynamically from the Claude Agent SDK so newly released Claude models (Opus 4.7 was already available six days earlier) appear without an app update. Upgrades the Claude agent protocol to v0.29.2. Adds a Referrals section with a $49 credit banner on the paywall.

6

April 22 to 26, v2.4.1 and v2.4.2

v2.4.1 fixes paywall blocking users mid-onboarding and a model-label bug where Sonnet users saw Smart due to a partial Anthropic model list. v2.4.2 fixes Smart (Opus) preference not persisting after the v2.4.0 model-id remap, improves the workspace directory picker copy, and broadens the Custom API Endpoint help text.

7

April 27, v2.5.0

Closes the month. Restores the browser-overlay signal that flags when Fazm is controlling a browser tab, fixes duplicate error text at the end of AI responses, makes timed-out and error messages persist after restart, adds promo code support to the Stripe checkout, pre-fills the email at checkout. Thirteenth release in 25 days.

Seven dev-tool primitives that landed in a consumer Mac agent in April

Most of these you already know from the editor side. The novelty is the host. Each item is a real changelog entry from the dates listed, not a roadmap promise.

What shipped

  • MCP server config that the agent reads from disk on every session start (v2.4.0, April 20)
  • Custom OpenAI-compatible API endpoint with environment variable support (v2.2.0, April 11)
  • Dynamic model list pulled from the SDK rather than baked into the binary (v2.4.0, April 20)
  • Pop-out chat windows that survive app restart and run independent sessions (v2.0.1, April 3)
  • Global keyboard shortcut to open a new pop-out chat from anywhere (v2.2.0, April 11)
  • Auto-fallback to a built-in Claude account when a personal account lacks model access (v2.0.7, April 5)
  • Privacy language correction from absolute to relative claims (v2.3.2, April 16)

The off-IDE layer versus the editor layer, point for point

Fields are populated from the actual code paths and changelog entries, not marketing pages.

FeatureClaude Code, Cursor, Windsurf classFazm (consumer Mac agent)
MCP server config file location~/.claude/mcp.json (Claude Code), each IDE has its own path~/.fazm/mcp-servers.json, plus a Settings UI to edit it
MCP entry shape (per-server fields)command, args, env, enabled (wrapped in mcpServers key)command, args, env, enabled (bare record, no wrapper)
Custom OpenAI-compatible endpointCursor and Windsurf added this earlier; setting under Modelsv2.2.0 on April 11; Settings field labeled Custom API Endpoint, doubles for local LLM bridges (v2.4.2)
Dynamic model registration on launch dayIDE updates ship via App Store or Sparkle and lag the model launch by hours to daysv2.4.0 on April 20 routes the Claude Agent SDK availableModels through the bridge so new ids appear on next session/new
Where the agent runsInside the editor; helpful when codingOn every app on the Mac (browser, mail, Slack, Notion, Linear, Salesforce); same MCP servers, different host
Release cadence in April 2026Cursor 0.4x weekly minor, Claude Code 2.x monthly minor13 releases (v2.0.1 to v2.5.0) across April 3 to 27
Distribution channelApp Store review (24+ hours) or Sparkle on signed binariesSparkle on Apple-notarized binary built by Codemagic; no App Store queue

Why this works for the consumer surface and not just the editor

The technical reason the two layers can share an MCP config file is that MCP is, by design, transport-agnostic about the host. A server speaks the protocol; whatever is on the other side of stdio is fine. The cultural reason the round-ups missed it is that the audience for round-ups is developers, and developers who write round-ups about developer tools tend to think about the editor first and the OS second. April flipped that for one specific kind of agent.

The reason Fazm in particular can run that agent across every app is that the perception layer is built on macOS accessibility APIs, not on screenshots. Accessibility APIs return structured trees: roles, values, focus state, hierarchy. They cost orders of magnitude less to query than a vision pass over a PNG, and they preserve semantics that a model can act on without a captioning step. So an MCP server that wants to read a Linear ticket the user is looking at gets the actual ticket text, not a screenshot to OCR. That is the half of the story that has nothing to do with April releases. The April releases are about the configuration plumbing.

Together, the two halves are why a developer can copy a working mcp.json from ~/.claude/ to ~/.fazm/ and have the same servers run against the entire Mac, with the same JSON shape and the same security posture.

Migration recipe, three lines of shell

For developers who already have a populated ~/.claude/mcp.json and want to try the same fleet system-wide:

mkdir -p ~/.fazm
# Unwrap the outer mcpServers key (Claude Code wraps, Fazm reads the bare record).
jq '.mcpServers' ~/.claude/mcp.json > ~/.fazm/mcp-servers.json
# Or, if your Claude Code config is already a bare record, just copy.
# cp ~/.claude/mcp.json ~/.fazm/mcp-servers.json

On next app launch (or via Settings, MCP Servers, Reload), the bridge re-reads the file at acp-bridge/src/index.ts line 1104, iterates each entry, skips any with enabled: false, and forwards the rest into the Claude Agent SDK. Tail /tmp/fazm-dev.log on a dev build (or /tmp/fazm.log on production) and look for "User MCP server loaded:" lines, one per server, on every session start.

What the dev-tool round-ups will eventually catch up to

Three things, on a guess. First, that the MCP shape is now stable enough across hosts that copy-paste between editor and OS-level agent is the default migration path, not a curiosity. Second, that release cadence on the consumer side is closing the gap with the IDE side, because the consumer side ships Sparkle binaries and not App Store review queues. Third, that the model layer (Opus 4.7, GPT-5.4, Gemini 3.1) shows up in editors and consumer agents within minutes of each other, because both consume the same SDKs.

Whether April 2026 turns out to be the inflection or just an inflection is a question for May. Either way, if the next round-up you read on this question still frames the story as IDE-only, you can read this page as the missing column.

Want to see your Claude Code MCP fleet running on the rest of your Mac?

Book a 20-minute call. We will copy your ~/.claude/mcp.json into ~/.fazm/mcp-servers.json on a fresh Fazm install and watch the same servers light up against your browser, mail, and Notion.

Frequently asked questions

What angle on AI developer tool updates from April 2026 does this guide cover that the round-ups miss?

Almost every April 2026 round-up framed the story as IDE-layer updates (Cursor MCP improvements, Windsurf new modes, Claude Code skill hooks, Aider features) plus model-layer launches (Opus 4.7 on April 14, GPT-5.4 on April 10, Gemini 3.1 Ultra on April 12). What they skipped: April was the month MCP server configuration and custom API endpoints left the editor and started running system-wide on consumer Mac AI agents. Fazm shipped both in the same window. Custom API endpoint setting landed in v2.2.0 on April 11. Custom MCP server support landed in v2.4.0 on April 20 via ~/.fazm/mcp-servers.json. The kicker: the JSON shape is wire-compatible with Claude Code's mcpServers config, which is documented as a goal in the source comment at Desktop/Sources/MCPServerManager.swift line 5. So a developer who already has servers configured for Claude Code can copy the file across and have the same servers run on top of every app on their Mac, not just the editor.

What does wire-compatible with Claude Code's mcpServers mean concretely?

It means the four fields per server entry (command, args, env, enabled) match exactly, and the top-level shape is also a record keyed by server name. The loader at acp-bridge/src/index.ts line 1108 declares the type as Record<string, { command: string; args?: string[]; env?: Record<string, string>; enabled?: boolean }>. That is the same shape Claude Code uses for its mcpServers entry. The save path on the Swift side at Desktop/Sources/MCPServerManager.swift line 124 declares the equivalent encoder struct. The practical consequence: cp ~/.claude/mcp.json ~/.fazm/mcp-servers.json restarts you with your existing MCP fleet, with the only caveat that nested wrappers (some Claude Code projects keep a top-level mcpServers key) need to be unwrapped first. The Fazm loader expects the bare record, not the wrapped object, so trim the outer key if your source file has it.

How fast did Fazm release in April 2026 compared with the dev-tool layer?

Thirteen releases across 25 days. v2.0.1 on April 3, v2.0.6 on April 4, v2.0.7 on April 5, v2.0.9 on April 5, v2.1.2 on April 7, v2.1.3 on April 9, v2.2.0 on April 11, v2.2.1 on April 12, v2.3.2 on April 16, v2.4.0 on April 20, v2.4.1 on April 22, v2.4.2 on April 26, v2.5.0 on April 27. Read straight from CHANGELOG.json in the Fazm source. That cadence is closer to a fast-moving CLI than to an IDE. It works because the app self-updates through Sparkle on a code-signed, notarized binary that ships from a private build pipeline (Codemagic) rather than an App Store review queue.

Why does it matter that MCP config moved from the IDE to the OS layer?

Because most knowledge work is not coding. An MCP server you configure inside Claude Code only helps you when you are inside Claude Code. The same server pointed at Linear, Notion, your shell, your filesystem, your Slack, has the same usefulness when you are writing a doc, triaging a queue, or filling a form in Salesforce, but only if the agent that calls it is sitting outside the editor. April 2026 is when consumer Mac apps started accepting that config in the same shape that pro IDEs accept it. So a single mcp-servers.json on disk now drives both the editor agent and the system-wide agent, with no translation layer. That was not true in March.

Is the custom API endpoint setting the same as the OpenAI baseUrl override in IDE tools?

It is the same idea. A field in Settings labeled Custom API Endpoint, added in Fazm v2.2.0 on April 11, points the local LLM bridge at any OpenAI-compatible URL. v2.4.2 on April 26 updated the help text to call out local LLM bridges as an example, which is the user-facing acknowledgement that this is also how you point Fazm at a local Llama or Qwen running on the same Mac. So in practice it covers two cases that previously needed two separate settings: corporate proxies and locally hosted models.

Does the dynamic model registration that landed on April 20 also apply to non-Claude models from the dev-tool round-up?

Only for models that come through the Claude Agent SDK, which today means the Claude family. v2.4.0 on April 20 added the dynamic-population path so that the moment Anthropic flips a new id on the SDK, Fazm picks it up on the next session/new without any rebuild. That is how Opus 4.7 appeared in the floating bar minutes after the SDK exposed it on April 14. For non-Claude models (GPT-5.4, Gemini 3.1, Grok, Llama, DeepSeek), the path is the custom API endpoint plus an MCP server entry, not the dynamic Claude Agent SDK lane. The two paths coexist by design.

Where in the Fazm repo can I read this myself?

Three files. CHANGELOG.json at the repo root captures every release, with v2.0.1 on April 3 and v2.5.0 on April 27 as the bookends. Desktop/Sources/MCPServerManager.swift is the Swift side: the comment at line 4 says it manages user-defined MCP servers in ~/.fazm/mcp-servers.json, and line 5 says the format mirrors Claude Code's mcpServers. acp-bridge/src/index.ts at lines 1102 to 1137 is the bridge-side loader: it reads the file, iterates the entries, skips any with enabled set to false, and pushes each into the servers array that gets handed to the Claude Agent SDK. Settings UI is in Desktop/Sources/MainWindow/Pages/SettingsPage.swift if you want to see how the same data renders to the user.

What is the practical takeaway for a developer reading this in April 2026?

If you already invested in MCP server configuration for an IDE this month, you can extend that investment to system-wide automation by copying one file. If you have not invested in MCP yet, the consumer Mac layer is now a legitimate place to start, because a working ~/.fazm/mcp-servers.json doubles as a working ~/.claude/mcp.json with the outer wrapper added. The boundary between developer tools and consumer agents is the file system. April 2026 is the month that boundary moved.

fazm.AI Computer Agent for macOS
© 2026 fazm. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.