APR 16 / 17:56 PT / 12 COMMITS / MCP HOST

The 48 hours a consumer Mac AI agent became an MCP host.

Every roundup for this window ships the same headlines: OpenAI Agents SDK, Claude Opus 4.7, Ollama kernel work, Continue.dev 1.0, llama-stack stars. Useful, but star-sorted household names are not where most of the actual work lives. This guide zooms into one MIT-licensed open source AI agent (github.com/mediar-ai/fazm) and walks a single 24-minute burst on April 16, 2026 that turned a consumer Mac app into a Claude Code-compatible MCP host. Twelve commits. 509 insertions. Eight files. One JSON path: ~/.fazm/mcp-servers.json.

M
Matthew Diakonov
12 min read
4.9from Reproducible from one git log
MIT-licensed Mac agent
Consumer DMG, not a dev framework
MCP host feature shipped Apr 16, 17:56 PT
Config mirrors Claude Code's mcpServers
56 commits across the Apr 15-16 window

THE SERP, HONESTLY

What every other page for this window covers

Run the query. Read the top ten results. They all converge on the same handful of stories: OpenAI's Agents SDK evolution, Claude Opus 4.7, Ollama engine tweaks, Continue.dev 1.0, Meta's llama-stack, a couple of awesome-lists. The coverage overlaps by 80 percent or more. That is useful if you only care about household names. It stops being useful when you want to know what actually shipped, by whom, on a given 48-hour window, in code a human can read.

OpenAI Agents SDKClaude Opus 4.7Ollama 0.6.2Continue.dev 1.0Meta llama-stackGoogle ADKCodex CLIvLLM nightlyMemPalaceawesome-ai-agents-2026

Every one of those is real. Every one of those is also already covered by twenty other pages. The gap in the SERP is the long tail: the open source projects that shipped real, user-facing capability in this window but do not have a press cycle behind them. This page fills exactly one slot in that tail, in enough depth that you can verify the whole thing yourself.

THE ANCHOR FACT

24 minutes, 12 commits, one config file

The number that anchors this entire page is what falls out of git when you slice the log down to one sub-30-minute window on April 16. Run this against a clone of github.com/mediar-ai/fazm:

reproduce the 12-commit MCP burst

Twelve commits. The first one is the 37-line bridge change that makes the loader read ~/.fazm/mcp-servers.json. The next ten build the native settings UI around it: manager, model, edit sheet, sidebar entry, search indexing, search item, small fixups. The last two clean up an unrelated streaming bug while the author was still in the file. Total: 509 insertions, 32 deletions, eight files. No press release.

0commits across Apr 15-16
0commits in the MCP burst
0minutes, first to last
0lines added in the burst

THE ARCHITECTURE

Three files, one data path, zero new dependencies

Most of the work in the 12-commit burst lives in three files. A tiny TypeScript patch teaches the bridge how to read a user-writable JSON file. A Swift manager owns the file. A SwiftUI sheet edits it. Together they turn a consumer macOS app into something you can point at any MCP server binary on your machine.

How a user-defined MCP server reaches the agent loop

~/.fazm/mcp-servers.json
Settings UI
Built-in tools
Fazm bridge
Claude Code SDK
Agent loop

THE 37-LINE BRIDGE PATCH

Commit 2152e6a3, the one that makes the feature exist

Everything else in the burst is UI. The feature itself is one function extension in the bridge. This is what got appended to buildMcpServers() in acp-bridge/src/index.ts, right after the built-in servers and right before the return:

acp-bridge/src/index.ts (abridged, from commit 2152e6a3)

No new dependency. No schema migration. No new runtime. The built-in servers above this block are still there. The Claude Code SDK still sees a single array. A user who drops a valid JSON file at that path gets their tools merged into the agent loop on the next session.

THE CONFIG

The same JSON as Claude Code, dropped one directory over

The compatibility with Claude Code's config shape is not accidental. The inline comment in MCPServerManager.swift says it plainly: “Format mirrors Claude Code's mcpServers”. So the exact same block of JSON works in either host. Here is a Postgres MCP server, registered in both:

~/.claude.json or ~/.fazm/mcp-servers.json (interchangeable)

Path one: ~/.claude.json. Path two: ~/.fazm/mcp-servers.json. Same JSON shape. Same stdio transport contract. Same behavior on enabled: false (skipped), same fallback for missing args or env. If you have a working MCP server, it works in both.

THE NATIVE UI

209 lines of SwiftUI that mean non-developers get in too

The other half of the burst is a real native settings UI. Commit 6ca21852 adds MCPServerEditSheet.swift: 209 lines of SwiftUI that let a non-developer add or edit a server without opening a JSON file. It is the visible half of “MCP host for consumers”:

What the MCPServerEditSheet.swift form collects

  • Name, a unique identifier (disabled during edit)
  • Command, the path to the MCP server executable
  • Arguments, one per line, optional
  • Environment variables, as key=value pairs, optional
  • Enabled toggle (written as a JSON field on save)
  • Inline validation with a human error message

On save, MCPServerManager encodes the form back out in the Claude Code-compatible shape (pretty-printed, sorted keys, enabled omitted when true) and writes it atomically to ~/.fazm/mcp-servers.json. The next new session picks it up.

TERMINAL WALKTHROUGH

What it looks like to add a server by hand

If you prefer the terminal, this is the minimal path from nothing to a loaded MCP server. The UI does exactly the same thing behind the scenes.

~/.fazm/mcp-servers.json from scratch

THE FULL 48H WINDOW

What else shipped in the same repo, April 15-16 2026

The MCP burst is the loudest commit cluster in this window, but it is not the only one. There are 56 commits across the two days, and four recognisable themes outside the MCP work. Each has hashes you can grep.

Memory Graph, now in settings

Commits 3f2430d0 and 9e096d79 (Apr 15) add a Memory Graph section to the settings sidebar and search index. b6e7656f wires graph-exploration and profile-exploration into FAZM_ONBOARDING so new users hit the feature during their first-run flow.

Per-message streaming state

Commits 21875930 and 4c615476 (Apr 15) refactor the chat streaming buffers from a single per-session queue to per-message state, so concurrent responses in pop-out windows do not clobber each other's output.

Per-session quick replies

Commit 2e9ed681 adds per-session callbacks for quick replies and follow-ups. c894bbff, db469333, c0414b0d, 5d273407 plumb sessionKey through the pop-out window lifecycle.

Privacy copy: scan and research as opt-in

eb450065 and 09b5b09e rewrite the chat prompts so file scanning and web research require explicit user consent each turn. f1d07e72 and 5196e220 clarify Claude API usage in the migration and local-first copy.

Dynamic available-models over ACP

Apr 16 morning, commits 2a206fa0, 6d25fb71, f4c85a49, abfb5ec3, and six others refactor available models to flow from the Claude Code SDK through a new models_available event on the ACP bridge, so the model picker in the shortcut bar stays correct when new models appear.

PDF and image attachment schema fix

Commit 865249d9 (Apr 15) fixes the ACP payload shape for image and PDF attachments so they round-trip cleanly to the agent across detached chat windows. Continuation of the Apr 14 attachments work.

WHY THIS MATTERS

MCP, no longer developer-only

How "MCP host" stopped meaning "dev tool" in one window

1

Before April 16, the host ecosystem was dev-leaning

Claude Desktop, Claude Code, Cursor, and a few other clients shipped MCP host support. All of them either expected developer workflows or required users to hand-edit JSON with zero UI affordances. The shape of the config was already stable, but the audience was narrow.

2

17:56 PT on April 16, a 37-line bridge patch

Commit 2152e6a3 appends user-defined servers to buildMcpServers() in acp-bridge/src/index.ts. No new dependency. No fork of the Claude Code SDK. The bridge just reads one extra file.

3

Over the next 24 minutes, a 209-line native UI

Commits 9840b05f, 8cb97bd3, 6ca21852, and eight more scaffold MCPServerManager, MCPServerConfig, and MCPServerEditSheet. The settings sidebar gets a dedicated entry. Settings search indexes it. The default section order puts users close to it during normal onboarding.

4

Net effect: the same config format, two audiences

Developers can keep hand-editing ~/.fazm/mcp-servers.json. Non-developers can use Settings > MCP Servers > Add. Both paths write the same file in the same shape. Both paths take effect on the next chat session. The host ecosystem is now bigger than just the developer bubble.

HOW TO VERIFY EVERYTHING ON THIS PAGE

Four shell commands, zero install required

Reproduce the numbers in this page

  1. 1

    Clone

    git clone https://github.com/mediar-ai/fazm.git

  2. 2

    Count the 48h window

    git log --all --after="2026-04-15 00:00:00" --before="2026-04-16 23:59:59" --oneline | wc -l -> 56

  3. 3

    Isolate the burst

    git log --all --after="2026-04-16 17:55:00" --before="2026-04-16 18:25:00" --oneline | wc -l -> 12

  4. 4

    Read the feature

    git show 2152e6a3 -- acp-bridge/src/index.ts

THE UNCOPYABLE BIT

Any other site can copy this prose. No other site can copy the git history of a public MIT repo to which those hashes resolve. Run the commands above and every number on this page lines up, or flag a bug; that is the whole contract.

HOW FAZM COMPARES

The same slot, seen three ways

FeatureTypical April 15-16 roundupFazm
Number of open source projects covered6 to 10 big-name repos1 MIT repo, deeply
Source of claimsEditorial paraphrase of release notesgit log of a public MIT repo
Commit hashes shownRare, usually noneAll 12 from the MCP burst, plus others
File and line referencesNoneSpecific paths in acp-bridge + Desktop/Sources
ReproducibilityTrust the editorFour shell commands reproduce the page
Covers the long tailNoYes, this page is exactly one slot of it
Audience for the highlighted featureNot specifiedConsumer Mac users, not just developers
12 / 24 min

Twelve commits turned a consumer Mac AI agent into a Claude Code-compatible MCP host. Zero new runtime dependencies, same JSON config shape, native UI for non-developers.

From the git log of github.com/mediar-ai/fazm, April 16, 2026

THE BIG PICTURE

What a 48-hour window actually looks like in open source AI

Zoom out. In the same window the big-name roundups cover, there are thousands of commits across hundreds of open source AI projects nobody writes about. We showed one of them, chosen because the work was legible (no squash, descriptive messages, real feature with a real user-facing artifact). The lesson is not “Fazm is the most important thing that shipped this week”; it is “pick any well-tended MIT repo in the space and you will find a real story on almost any two-day window if you read the log”. That is the ecosystem the top-of-SERP roundups are underselling.

As for 0 commits and 0 lines of new code between 17:56 and 18:20 PT on April 16, 2026: that is what “a consumer app became an MCP host” looks like when you read it in the source, not the press.

Want Fazm and your own MCP servers running by the end of the call?

Bring a Mac and a server you care about. We will get ~/.fazm/mcp-servers.json loaded and the tools live in a chat before we hang up.

Book a call

Frequently asked questions

What were the biggest open source AI updates on April 15-16, 2026?

The headline news that every roundup covered: OpenAI's Agents SDK evolution announced April 16, Anthropic's Claude Opus 4.7 release on April 16, and continued momentum on the usual suspects (Ollama 0.6.2 from earlier in the month, Continue.dev 1.0, Meta llama-stack). What no roundup covered: the long tail of MIT-licensed agents shipping meaningful daily work. One example is Fazm (github.com/mediar-ai/fazm), an open source Mac AI agent that landed 56 commits across April 15 and April 16, including a twelve-commit burst on April 16 that turned the consumer app into a Claude Code-compatible MCP host. That MCP-host feature is the story of this page.

How do you know it was exactly twelve commits in the MCP burst?

Because git is the source of truth. Clone github.com/mediar-ai/fazm and run: git log --pretty=format:"%h %ai %s" --all --after="2026-04-16 17:55:00" --before="2026-04-16 18:25:00". You get twelve lines, starting with 2152e6a3 (Add support for custom MCP servers via ~/.fazm/mcp-servers.json) at 17:56:47 PT and ending with 0536a6e6 (Remove unused lastTextContentBlockIndex tracking) at 18:20:13 PT. The span is 24 minutes, 509 insertions, 32 deletions across eight files. Every claim on this page is reproducible with one shell command.

What exactly does "custom MCP servers in ~/.fazm/mcp-servers.json" mean?

It means a consumer-facing Mac AI agent (not a developer framework) now reads a user-writable JSON file at ~/.fazm/mcp-servers.json, parses it, and loads each entry as an MCP tool source alongside its built-in servers (playwright, macos-use, whatsapp, google-workspace). The format mirrors Claude Code's mcpServers exactly: each server is an object with command, optional args, optional env, and optional enabled. The loader lives at acp-bridge/src/index.ts starting at line 985; the config parser lives at Desktop/Sources/MCPServerManager.swift line 41; the add/edit UI lives at Desktop/Sources/MainWindow/Pages/MCPServerEditSheet.swift and is 209 lines.

Can I copy my Claude Code mcpServers config straight into Fazm?

Yes. Take the mcpServers object from ~/.claude.json, save it as ~/.fazm/mcp-servers.json, and restart Fazm. The bridge loops Object.entries(userServers) and, for each entry where enabled is not false, pushes a server definition into the array that is handed to the Claude Code SDK. Any MCP server that works with Claude Code (stdio transport, spawned as a child process with command + args + env) works with Fazm on the same config. The compatibility is intentional; the inline comment in MCPServerManager.swift literally says the format mirrors Claude Code's.

What else shipped on April 15, 2026 in the same repo?

April 15 had 32 commits concentrated in four themes. First, per-session streaming and quick-reply callbacks (commits 21875930, 4c615476, 2e9ed681) continuing the April 13 concurrency push. Second, a new Memory Graph settings section (3f2430d0, 9e096d79) and graph-exploration added to the FAZM_ONBOARDING flow (b6e7656f). Third, explicit opt-in language for file scanning and web research (eb450065, 09b5b09e) and privacy copy clarifying Claude API usage (f1d07e72, 5196e220). Fourth, image and PDF attachment formatting fixes for the ACP schema (865249d9). All hashes are on main.

Why does "consumer app becomes MCP host" matter for a roundup of open source AI tools?

Because until April 16, 2026, MCP hosts in practice were Claude Desktop, Claude Code, Cursor, and a handful of other dev-leaning clients. All required either a GUI built around developer workflows or direct JSON editing with no UI. Shipping MCP support inside a consumer Mac agent, with both a JSON config path and a SwiftUI edit sheet, pushes the host ecosystem out of the developer bubble. The 209-line MCPServerEditSheet.swift is, concretely, what that feels like: name, command, args (one per line), environment variables as key/value pairs, enabled toggle. Same config as Claude Code, no terminal required.

How do the built-in Fazm MCP servers fit in alongside user-added ones?

They coexist. In acp-bridge/src/index.ts, the function buildMcpServers starts by adding the built-ins: fazm-tools (always), playwright (unless session is observer-only), macos-use (native macOS accessibility automation), whatsapp (Catalyst app controller), and google-workspace (Python stdio server). Then, at line 985, it appends every enabled entry from ~/.fazm/mcp-servers.json. The Claude Code SDK sees a single merged list. If a user-added server name collides with a built-in, the built-in wins because it was pushed first; a safe default for shipped capabilities.

What is different about Fazm compared to other open source AI agents that shipped this week?

Two things. First, it reads the focused app's content via the macOS Accessibility tree, not screenshots. That is an architectural commitment, not an aesthetic one: AX gives you typed fields, hierarchies, and roles, where screenshots force OCR and lose structure on dense UI. Second, it works against any Mac app, not only the browser, and ships as a consumer DMG (not a developer framework). The MCP support added on April 16 sits on top of that: because the agent already has first-class tool integrations for Playwright, macOS automation, WhatsApp, and Google Workspace, adding user-defined stdio MCP servers to the same pipeline is a 37-line bridge change plus a config manager plus an edit sheet.

Are there reproducible numbers on this page I can check without installing the app?

Yes. In a fresh clone of github.com/mediar-ai/fazm: (1) git log --all --after="2026-04-15 00:00:00" --before="2026-04-16 23:59:59" --oneline | wc -l returns 56. (2) git log --all --after="2026-04-16 17:55:00" --before="2026-04-16 18:25:00" --oneline | wc -l returns 12. (3) git show 2152e6a3 --stat reveals acp-bridge/src/index.ts, 37 insertions. (4) git show 9840b05f --stat reveals Desktop/Sources/MCPServerManager.swift, 114 insertions. (5) git show 6ca21852 --stat reveals Desktop/Sources/MainWindow/Pages/MCPServerEditSheet.swift, 209 insertions. Nothing on this page is a marketing number; all of it falls out of the repo.

How do I actually install Fazm and try a custom MCP server?

On a Mac: download the signed DMG at fazm.ai, drag to Applications, open, and grant Accessibility permission when prompted. Open Settings and scroll to the MCP Servers section in advanced settings (added April 16 by commit 8cb97bd3). Click Add. Enter a name, a command (for example, the path to a local MCP server binary or npx package), optional args (one per line), optional environment variables as key=value pairs. Save. Fazm writes the config to ~/.fazm/mcp-servers.json. On the next new chat session the bridge loads the server and its tools appear in the agent loop. You can also write ~/.fazm/mcp-servers.json by hand; the format is documented in MCPServerManager.swift.