AI news for April 16-17, 2026 is a list of weights. The structural change is one JSON file in your home directory.
NVIDIA Ising. GPT-5.4-Cyber. Codestral 2. OLMo 2 32B. Llama 4 Maverick. Every roundup for these two days lists the same weights and papers. None of them covers the shift that actually decides whether any of this runs on a user's Mac: MCP became the shared catalog format between Claude Code and consumer agents, and on April 17, 2026, Fazm shipped a byte-for-byte compatible registry at ~/.fazm/mcp-servers.json. Point your Claude Code MCP config at it and your native Mac agent inherits the tool list, with a live accessibility tree underneath instead of a pixel buffer.
The anchor fact, in one file path
Your Mac already knows this shape
The format of ~/.fazm/mcp-servers.json mirrors Claude Code's mcpServers byte for byte: top-level JSON object keyed by server name, value is { command, args?, env?, enabled? }. The enabled field is omitted when true. Paste in what you already run.
One registry, every MCP server a new model can call
Whichever April 16-17 model you route Fazm to, the tool catalog is identical. Built-in servers on the bridge side, user servers from your JSON file, same accessibility-tree surface.
Open-source models land -> shared MCP catalog -> native AX control
Forty-eight hour ship log
Twenty-two commits between April 16 00:00 and April 18 15:00
Every timestamp here is Pacific, taken from git log on the fazm repo. Each step lands a specific piece of the MCP registry, its UI, or the ACP wire format. You can reproduce the list with git log --since="2026-04-16" --until="2026-04-18".
fazm commits, 2026-04-16 through 2026-04-18
v2.3.2 on 2026-04-16 - 'local-first' system prompt rewrite
Ships the honest privacy framing (local-first replaces 'nothing leaves your device') the rest of this work needs, since a tool surface that can reach remote MCP servers cannot claim full isolation. Changelog line three, same release, fixes streaming response leaks between pop-out windows.
2026-04-17 11:59 - dynamic models_available emission
Commits e92666a9 and e15b06e3 drop the default pseudo-model and rebuild availableModels as a live list pushed through the ACP SDK. models_available becomes the sibling event to what mcp_servers_available will be 44 minutes later.
2026-04-17 12:42 - McpServersAvailableMessage wire type
Commits 5c6f171e and 261785e0 add the protocol type and the emit call. acp-bridge now announces every loaded MCP server and flags builtin:true vs builtin:false based on BUILTIN_MCP_NAMES name lookup.
2026-04-17 12:43 - Add support for custom MCP servers
Commit 2152e6a3. The loader that reads ~/.fazm/mcp-servers.json, merges it with the five built-ins, and passes the combined list into every session/new request. The keystone commit for the whole feature.
2026-04-17 12:44 - MCPServerManager + UI plumbing
Commits 9840b05f, 8cb97bd3, 83c143a7, 6ca21852 land the Swift ObservableObject that owns the config file, the Settings section, ActiveServer tracking, and the MCPServerEditSheet for adding or editing servers in-app.
2026-04-17 12:45 - URL-based MCP server fix
Commit a3bb8fac. 'Fix command property resolution for URL-based MCP servers.' HTTP MCP servers (Linear remote, Slack bridge, self-hosted endpoints) stop crashing the loader; they were defined in the McpServerConfigHttp type but the merge path assumed command existed.
2026-04-17 13:13 - queued follow-up streaming fix
Commit d4f63904. Once the MCP catalog can balloon, streaming backpressure matters more. This hardens the message queue for follow-up questions sent while an AI response is still streaming.
2026-04-17 16:57 - Add description field to available models
Commit 16a0ad9f. With dynamic model lists arriving, the ACP SDK's description field now rides along so the chat header can show distinguishing copy on each model option instead of just the raw ID.
2026-04-18 09:34 - ACP SDK bump to 0.29.2
Commits 5a1d5a7a and 95287a32. package.json pins @agentclientprotocol/claude-agent-acp at ^0.29.2. The bump is what enabled setModelsAvailableHandler and the whole dynamic model/MCP broadcast story. Four versions in one jump (0.25 -> 0.29).
2026-04-18 09:36-09:38 - Referrals feature alongside
Six commits under the feature/referrals umbrella: referral card in settings, paywall banner, signup code validation. Unrelated to MCP by function, but same ship window, same release train.
2026-04-18 14:01-14:13 - model ID normalization
Commits f0d49f0f, 8b4ad3bf, 0e679e48, 28f94d0d, 75676b9c. Legacy model IDs are migrated to short aliases, default model map is rebuilt with family metadata, and existing sessions auto-upgrade when the requested model differs. The housekeeping the dynamic list needed.
What the loader actually does
Forty lines of TypeScript, zero translation layer
This is the exact code that reads your config and merges it with the five built-in servers. No DSL, no YAML preamble, no wrapper config. The JSON is the JSON, the loader is a for-of loop, and disabled servers get skipped by a single predicate.
The built-in set, verbatim
Anything whose name is not in BUILTIN_MCP_NAMES becomes builtin:false when the ACP event fires. This is a pure name match, so if you register a custom server called fazm_tools or macos-use you will confuse the UI; pick a distinct name.
How the UI learns about new servers
emitMcpServers dedupes against the last-emitted JSON so Settings only re-renders when the catalog actually changes. The ACP message is the mcp_servers_available wire type that landed at 12:42 PT on April 17.
Swift side of the same file
The Mac app is authoritative for user edits (the Settings sheet writes here), then the Node-side bridge re-reads the file on every session start. The omit-when-true enabled rule is what keeps the on-disk shape identical to Claude Code's.
Try it yourself
What one session/new triggers
What a model swap feels like when the tool catalog is shared
The same five MCPs, three different models, one accessibility tree
Opus -> Sonnet -> local Codestral 2, same tool list
Frame 1 - Claude Opus over hosted ACP
The built-in five, and the ones you plug in
Every session loads the built-in ring first, then orbits your user servers around the same central bridge. The bridge sees them all as the same McpServerConfig type.
In the 48-hour window, the fazm repo absorbed
0 commits that turned Claude Code's MCP registry into a Mac desktop agent feature
Swift ObservableObject, settings sheet, ACP event wire type, Node loader, built-in name set, URL transport fix, ACP SDK bump, and the adjacent dynamic-models-available broadcast. One keystone commit: 2152e6a3.
Why a consumer Mac app, not a dev framework
The registry is a user-editable file
Settings > MCP Servers writes directly to ~/.fazm/mcp-servers.json with pretty-printed sorted keys. No CLI, no daemon restart, no recompile. A non-developer copy-pastes the block their engineer sent them and restarts Fazm.
The built-in list is hardcoded, not configured
BUILTIN_MCP_NAMES is a Set in Node, not a config value. That is the point: built-ins are product surface area, not user concern. They ship, they update, they get sandboxed the same way.
AX tree, not screenshots
The macos-use MCP server talks to AXUIElementCreateApplication directly. Every user MCP server layered on top inherits a text-shaped tool surface. You are not asking a vision model to click pixels.
Same JSON as Claude Code
Paste your mcpServers block from ~/.claude.json or a project CLAUDE_MCP_CONFIG into ~/.fazm/mcp-servers.json. The Node loader expects command, args, env, enabled — identical keys, identical defaults.
Deduped event emission
emitMcpServers JSON-stringifies the payload and compares against lastEmittedMcpServersJson. Settings re-renders only when the set actually changed, so the UI does not thrash on model swaps.
URL transport works too
McpServerConfigHttp supports remote MCP servers with headers. After commit a3bb8fac (2026-04-17 12:45), url-based user configs no longer crash the loader.
The tooling layer most April 16-17 AI news pages skip
Every other roundup lists model weights. Here is the side of the cycle that actually ships on a Mac.
| Feature | Typical weights-only news page | Fazm |
|---|---|---|
| What April 17 ships | A list of Hugging Face uploads | A list plus ~/.fazm/mcp-servers.json wired live to the ACP bridge |
| MCP server format | Not discussed | Byte-for-byte Claude Code mcpServers shape (command, args, env, enabled) |
| Adding a new tool to the agent | Fork the vendor SDK | Edit ~/.fazm/mcp-servers.json, restart, done |
| Built-in catalog | Opaque | Five named servers (fazm_tools, playwright, macos-use, whatsapp, google-workspace) |
| HTTP MCP transport | Roadmap | McpServerConfigHttp with headers, fixed on 2026-04-17 12:45 (a3bb8fac) |
| Dynamic model list | Hardcoded in each page | models_available ACP event from SDK 0.29.2, live in chat header |
| Tool surface across models | Screenshots, per-model drift | Accessibility tree, identical across Opus, Sonnet, Codestral 2, Llama 4 |
| Verifiable claims | Invented benchmarks | Twelve specific git commits, three file paths, one package.json line |
The one-line anchor fact
~/.fazm/mcp-servers.json
Defined in Desktop/Sources/MCPServerManager.swift lines 40-44. Read by acp-bridge/src/index.ts lines 1102-1141 on every buildMcpServers call (which runs once per session/new). Announced through the mcp_servers_available ACP message with each server tagged builtin: true or builtin: false based on a hardcoded five-name set.
The sibling event, models_available, rides on the ACP 0.29.2 bump in acp-bridge/package.json line 15. The chat header learns about new model options the same way Settings learns about new MCP servers: a single deduped broadcast from the bridge. The wiring is copy-compatible with Claude Code because that is the point.
“Add support for custom MCP servers via ~/.fazm/mcp-servers.json”
fazm repo, commit 2152e6a3, 2026-04-17 12:43 PT
What every April 16-17 AI news roundup is missing
The tooling story behind the weights
- That MCP is now the shared catalog format between Claude Code and consumer Mac agents
- That ~/.fazm/mcp-servers.json uses the same schema as Claude Code's mcpServers object
- That the five built-in servers are hardcoded by name, not configured, so they are product surface area
- That an ACP event (mcp_servers_available) keeps the Settings UI in sync with the bridge live
- That the loader handles both stdio (command, args) and HTTP (url, headers) MCP transports
- That the ACP SDK bump from 0.25.0 to 0.29.2 carried the dynamic model list the chat header needs
- That every MCP tool inherits an accessibility-tree surface from macos-use, not a pixel buffer
- That you can verify twelve specific commits in a 48-hour window with a single git log invocation
Frequently asked questions
Frequently asked questions
What were the headline AI releases on April 16-17, 2026?
The 48-hour window covered continued uptake of NVIDIA's Ising open family for quantum error correction, OpenAI's GPT-5.4-Cyber variant hardening in the Trusted Access program, a fresh push of Meta's Llama 4 Maverick checkpoints and Mistral's Codestral 2 (Apache 2.0), a Hugging Face wave of quantized OLMo 2 32B and fine-tuned agent-tool models, arXiv drops on long-context retrieval and tool-use RL, and the Agent Client Protocol tick from 0.25.0 to 0.29.2 which Fazm picked up in the acp-bridge package on April 18. For a Mac user the structurally bigger shift was the tooling side, not the weight side: MCP became the shared catalog format between Claude Code and consumer agents.
What changed for Fazm on April 16-17 that nobody else is covering?
Three things. First, a user-writable Claude-Code-compatible MCP server registry at ~/.fazm/mcp-servers.json whose JSON shape is byte-for-byte identical to Claude Code's mcpServers object. Second, a new ACP message type mcp_servers_available that tags each loaded server as builtin:true or builtin:false so the Mac app can render the full tool catalog live in Settings. Third, a jump in the pinned ACP SDK to 0.29.2 (package.json, 2026-04-18) that unlocked setModelsAvailableHandler and dynamic model enumeration. Every MCP tool you already run in Claude Code now plugs into a native AX-tree control surface with zero rewrite.
Where exactly does the MCP config file live and what does it look like?
~/.fazm/mcp-servers.json. Verify it by opening /Users/matthewdi/fazm/Desktop/Sources/MCPServerManager.swift lines 4-5 and 40-44: the init builds the URL from FileManager.default.homeDirectoryForCurrentUser appending .fazm/mcp-servers.json. The schema mirrors Claude Code's mcpServers exactly: a top-level JSON object whose keys are server names, values are { command: string, args?: string[], env?: Record<string,string>, enabled?: boolean }. When enabled is true (the default) the field is omitted on save. The ACP bridge re-reads this file every time buildMcpServers runs inside acp-bridge/src/index.ts at lines 1102-1141.
What are the built-in MCP servers, and how do I tell mine apart from them?
Hardcoded in acp-bridge/src/index.ts line 1266: BUILTIN_MCP_NAMES = { fazm_tools, playwright, macos-use, whatsapp, google-workspace }. Any name not in that set is flagged as builtin:false when the emitMcpServers function sends the mcp_servers_available ACP message (line 1252). In the app, Settings > MCP Servers renders a built-in section and a custom section side by side. The tagging is pure name lookup, so if you add a user server called 'playwright' the bridge will treat it as built-in. Pick a distinct name.
Why does a news roundup page talk about MCP config instead of weights?
Because the AI news cycle for April 16-17 is already saturated with weight lists. Every SERP result for these dates ranks arXiv papers and Hugging Face uploads. What nobody writes is the answer to 'the new model shipped, now what?' On a Mac the path from a new model to real desktop automation goes through MCP servers, which is the protocol the model speaks to tools through. Fazm is now the consumer surface for that protocol: paste the same JSON you already have in ~/.claude.json or your Claude Code project config, restart Fazm, and the model you picked can use those tools on your actual Mac.
What did the ACP protocol 0.25.0 to 0.29.2 bump buy?
Two user-visible wires. First, emitModelsIfChanged, which reads the ACP SDK's announced available model list and broadcasts models_available messages so the Smart/Fast toggle, paywall, and shortcut settings can update without an app rebuild (acp-bridge/src/index.ts line 1271). Second, mcp_servers_available, the sibling event that does the same thing for the tool catalog (line 1252). Both messages are deduped by JSON-equality against the last-emitted payload, so the UI only re-renders when the list actually changes. The bump lands in the pinned version in acp-bridge/package.json line 15 (@agentclientprotocol/claude-agent-acp ^0.29.2).
Can my Claude Code MCP servers really move over without modification?
Yes for any stdio MCP server whose command and args refer to absolute paths or path-resolvable binaries. The loader in buildMcpServers at lines 1102-1137 iterates your user servers, skips any with enabled:false, logs a warning if command is missing, and appends them to the same McpServerConfig array the built-ins live in. There is no per-server wrapper or translation layer. Environment variables are passed as name/value pairs. Cwd inheritance follows the session's configured workspace. If your server works with 'claude mcp add --transport stdio', it works with Fazm.
What about HTTP MCP servers?
The bridge type McpServerConfigHttp is defined at acp-bridge/src/index.ts lines 984-988 (type: 'http', url, headers). A follow-up commit on April 17 at 12:45 (a3bb8fac) fixes command property resolution for URL-based MCP servers specifically, so the loader no longer errors when a user config supplies url instead of command. If you have a remote MCP server from Claude Code, Linear, or any self-hosted endpoint, you can reference it directly. Authentication headers are forwarded verbatim.
How does this change what model I can use on my Mac?
The ACP SDK emits the live available-model list through setModelsAvailableHandler (commit 6b26b408, 2026-04-17). Fazm rebroadcasts it as the models_available ACP message. That list feeds the chat header's Smart/Fast toggle and the model picker in shortcut settings. Combined with the Custom API Endpoint shipped in v2.2.0 on April 11, you can point ANTHROPIC_BASE_URL at a local vLLM serving Codestral 2 or an LiteLLM proxy fronting Llama 4 Maverick, and the exact same MCP catalog from ~/.fazm/mcp-servers.json rides along. The tool surface is identical regardless of which model answers.
Is this screenshot-based computer use or something else?
Neither Fazm nor its MCP layer is screenshot-based. Desktop control goes through mcp-server-macos-use (a bundled native binary, not a vision model) which talks to AXUIElementCreateApplication and AXUIElementCopyAttributeValue directly. The tool surface any MCP server sees is a text-shaped accessibility tree, not a pixel buffer. So when the April 16-17 news cycle talks about GPT-5.4-Cyber or agent tool-use RL papers, the model is swappable but the tool-call format is stable. You do not retrain against a new screenshot distribution every time a weight update drops.
What should I put in ~/.fazm/mcp-servers.json first?
Anything you already run in Claude Code. Common picks as of April 17, 2026: a Linear MCP server for issue triage, a Postgres or Neon MCP server for your app's DB, a Slack or Linear stdio tool, a GitHub MCP for gh command wrapping, a local Python one for domain-specific automations. The format is { "name": { "command": "/path/to/bin", "args": ["--flag"], "env": {"TOKEN": "..."} } }. Drop the file into place, restart Fazm, watch the Settings > MCP Servers > Custom section populate, and watch mcp_servers_available get emitted in the bridge logs.
How do I verify any of this is real and not marketing?
Four files, all local and inspectable. /Users/matthewdi/fazm/Desktop/Sources/MCPServerManager.swift (the Swift-side config loader). /Users/matthewdi/fazm/Desktop/Sources/MainWindow/Pages/MCPServerEditSheet.swift (the UI). /Users/matthewdi/fazm/acp-bridge/src/index.ts lines 1102-1141, 1252-1269 (the Node-side merge and event broadcast). /Users/matthewdi/fazm/acp-bridge/package.json line 15 (the ACP SDK pin at ^0.29.2). git log between 2026-04-16 and 2026-04-18 in the fazm repo shows 22 commits landing this work, including 2152e6a3 'Add support for custom MCP servers via ~/.fazm/mcp-servers.json' and 95287a32 'Update @agentclientprotocol/claude-agent-acp to 0.29.2'.
Bring your Claude Code MCP catalog to the Mac
Download Fazm, drop your mcpServers JSON into ~/.fazm/mcp-servers.json, restart. Your existing Linear, Postgres, GitHub, and custom MCP servers ride alongside Fazm's built-in five, with macos-use giving every model a native accessibility-tree surface. Whichever April 16-17 model you pick, the tool catalog is the same.
Download Fazm →
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.