Open source AI, April 14 2026Five MCP servers, one bridgegithub.com/mediar-ai/fazm (MIT)

The April 14 2026 open source AI story no roundup tells: five MCP servers across Node, Rust, and Python inside one signed Mac app

Every April 14 2026 roundup lists open source projects as a flat feed. Trending repo. Star count. Release tag. None of them show what it takes to wire several of those projects into one consumer Mac app that a non-developer can download and run. Fazm does, in a 74-line block of acp-bridge/src/index.ts, under a four-dep package.json, with the registry broadcast on the wire.

F
Fazm
13 min read
4.9from 200+
Every April 14 2026 fact traced to a file:line in the Fazm repo
Five MCP servers registered across Node + Rust + Python
MIT-licensed, signed, notarized Mac DMG at github.com/mediar-ai/fazm
@playwright/mcp 0.0.68Claude Agent ACP 0.29.2Codex CLI 0.121.0-alpha.4Goose 4.9K starsSmolAgents 4.1K starsLlama Stack 6.4K starsAgent Development Kit 8.2K starsArchon April 11 releasellama.cpp Vulkan flash-attnllama.cpp audio Gemma 4llama.cpp audio Qwen 3Llama 4 Scout GGUFmcp-server-macos-usewhatsapp-mcp binarygoogle-workspace-mcpMIT licenseApache 2.0Rust binary MCPNode MCPPython stdio MCP

Anchor fact, verifiable

Line 1266 of acp-bridge/src/index.ts is the whole April 14 2026 story, in one line

const BUILTIN_MCP_NAMES = new Set(["fazm_tools", "playwright", "macos-use", "whatsapp", "google-workspace"]);

Five strings. Three language runtimes (Node for fazm_tools and playwright, Rust binaries for macos-use and whatsapp, a Python venv for google-workspace). Registered across acp-bridge/src/index.ts lines 1027 to 1100, broadcast to the Swift UI at line 1139, and shipped as a single signed DMG from an MIT-licensed repo. That is the April 14 2026 open source AI headline that does not appear on any roundup page.

0

Built-in MCP servers hardcoded at line 1266

0

Language runtimes bundled under one bridge process

0

Runtime deps in acp-bridge/package.json

0

Line where emitMcpServers(servers) broadcasts the registry

The four-dep glue layer, verbatim

Fazm does not depend on a dozen AI frameworks. The entire April 14 2026 open source stack that this page is about runs on four runtime deps. Two of them, @playwright/mcp and @agentclientprotocol/claude-agent-acp, are themselves open source projects under active April 2026 development.

acp-bridge/package.json

The five-server registration block, verbatim

This is the uncopyable part. Lines 1027 to 1100 of acp-bridge/src/index.ts push five MCP servers onto the same array, then line 1139 (not shown inside this block, but one function below) emits the list to the Swift UI. A consumer user never sees this file. A developer reading a SERP roundup never sees this file. It is the thing no competitor roundup is quoting.

acp-bridge/src/index.ts

Five open source projects, one bridge, three language runtimes

The servers enter on the left as raw open source projects. They flow through buildMcpServers() in the middle. They leave on the right as live child processes across three runtime families, sharing one conversation, one history, and one model context.

April 14 2026 open source projects wired into a single Mac bridge

@playwright/mcp 0.0.68
mcp-server-macos-use
whatsapp-mcp
google-workspace-mcp
fazm_tools (stdio)
acp-bridge buildMcpServers()
Node runtime (Playwright)
Rust binary (macOS AX)
Rust binary (WhatsApp)
Python venv (Workspace)
Node stdio (fazm tools)

The registry function and the five-string set, verbatim

The function at line 1252 converts the servers array into a wire payload with a builtin flag per server. The set at line 1266 is the source of truth for which names count as builtin. The send() call at line 1261 emits the registry to the Swift UI over the ACP transport as a message of type mcp_servers_available, which was added on April 17 2026 in commit 2858771b.

acp-bridge/src/index.ts (registry)
1266

The whole April 14 2026 open source AI story that a consumer Mac app experiences, compressed into one string Set: new Set(["fazm_tools", "playwright", "macos-use", "whatsapp", "google-workspace"]).

acp-bridge/src/index.ts

The SERP roundup view vs. the shipped-app view

Toggle between the way the April 14 2026 open source AI story is usually told, and the way Fazm's source tree actually tells it.

Open source AI news framing, April 14 2026

A flat list of trending open source AI projects with star counts and release tags. Google ADK (8.2K stars). Meta Llama Stack (6.4K stars). Codex CLI (5.8K stars). Goose (4.9K stars). SmolAgents (4.1K stars). Archon (April 11). llama.cpp commits (Vulkan flash-attn, audio Gemma 4, audio Qwen 3). Llama 4 Scout GGUF. The reader closes the tab knowing what exists but not what it would take to put more than one of these inside a single consumer app.

  • Projects framed as isolated repos
  • No file:line anchors into any consumer app
  • No mention of how multiple MCP servers coexist
  • No language-runtime story (Node vs Rust vs Python)
  • No signed-DMG distribution angle

The six-step lifecycle from app launch to cross-runtime tool call

This is what happens inside the bridge process from the moment the user opens Fazm to the moment an April 14 2026 open source MCP server (say Playwright MCP 0.0.68) fires a tool call, with a Python Google Workspace call coming mid-session from the same SDK.

From four npm deps to five live child processes

1

The bridge process starts. Four npm deps load.

The ACP bridge is spawned by the Fazm Swift app at launch. Node reads acp-bridge/package.json. @playwright/mcp ^0.0.68, @agentclientprotocol/claude-agent-acp ^0.29.2, ws ^8.20.0, and zod ^4.0.0 are the only four runtime deps. That is the entire glue layer.

2

buildMcpServers() runs. Five servers get pushed.

Lines 1027 to 1100 of acp-bridge/src/index.ts push Playwright MCP (Node), mcp-server-macos-use (Rust binary), whatsapp-mcp (Rust binary), and google-workspace-mcp (Python venv) onto the servers array. fazm_tools (a stdio Node script at line 56) was added earlier in the same function.

3

User MCP servers from ~/.fazm/mcp-servers.json append.

Lines 1104 to 1137 open the user config, skip entries with enabled: false, convert env maps into Array<{name, value}> shape, and push each entry onto the same servers array. Claude Code's mcpServers.json format is mirrored exactly.

4

emitMcpServers(servers) broadcasts the full list.

Line 1139 calls the function defined at line 1252. Each server is mapped to { name, command, builtin } where builtin is true if the name is in BUILTIN_MCP_NAMES (line 1266). The send() call at line 1261 emits type: "mcp_servers_available" to the Swift UI.

5

The Swift UI renders the MCP settings section.

Fazm's MCPServerManager receives the mcp_servers_available message (commit 2858771b, April 17 2026), splits servers by the builtin flag, and renders two sections in Settings: Built-in (the five names above) and Custom (everything from ~/.fazm/mcp-servers.json).

6

A user prompt arrives. The SDK picks a tool across runtimes.

The user types something like "open chrome, go to united.com, book SFO to JFK Friday." The Claude Agent SDK issues a tool_use for mcp__playwright__browser_navigate (Node runtime). Mid-session the user asks to "drop a note in my Google Doc," and the same SDK issues mcp__google-workspace__docs_append (Python runtime). One conversation, three runtimes, five servers.

Twelve messages across six actors

One prompt enters the top. Twelve internal messages traverse the floating bar, the bridge, buildMcpServers, the Claude Agent SDK, and a chosen MCP child process. The mcp_servers_available event in the middle is the one no open source AI roundup covers.

Prompt to Playwright MCP tool call under @agentclientprotocol/claude-agent-acp 0.29.2

UserFloating barACP bridgebuildMcpServersClaude Agent SDKMCP child processopen chrome and book me a flightsession/promptbuildMcpServers(sessionKey='main')servers.push x5 (lines 1027-1100)emitMcpServers(servers) line 1139mcp_servers_available messagesession/prompt with MCP server configstool_use: mcp__playwright__browser_navigatetool_result: YAML snapshot (691 chars)stream_event assistant textsessionUpdate agent_message_chunk'booking page loaded'

The five built-in MCP servers, one card each

Each card is one of the strings inside BUILTIN_MCP_NAMES, plus the user-extensible sixth slot. The file:line anchors on each card are grep-verifiable in the MIT-licensed repo at github.com/mediar-ai/fazm.

@playwright/mcp 0.0.68

Registered at acp-bridge/src/index.ts lines 1049 to 1054. Node child process spawned under the bridge's own process.execPath. Three custom flags at line 1033 cut per-turn screenshot payload from ~500 KB base64 PNG to ~691 chars of YAML snapshot. An init-page overlay at line 1035 injects a visible 'controlled by Fazm' banner on every page.

mcp-server-macos-use (Rust)

Rust binary bundled under Contents/MacOS. Resolved at line 63, registered at lines 1057 to 1063. Controls any Mac app via native accessibility APIs, not screenshots. This is the differentiator most roundups never reach.

whatsapp-mcp (Rust)

Second Rust binary, same bundling pattern, registered at lines 1068 to 1073. Drives the native WhatsApp Catalyst app via accessibility APIs (not WhatsApp Web). Tools include whatsapp_search, whatsapp_open_chat, whatsapp_send_message.

google-workspace-mcp (Python)

Full Python venv under Contents/Resources/google-workspace-mcp/. Registered at lines 1081 to 1099 with PYTHONHOME pointing at the bundled venv and PYTHONDONTWRITEBYTECODE=1 so the process does not invalidate the code signature by writing .pyc files.

fazm_tools (Node stdio)

Internal stdio Node script resolved at line 56. The only MCP server exposed to the observer session (per the early return at line 1022). Provides Fazm-internal tools without giving an observer browser or WhatsApp access.

User MCP servers (any runtime)

Anything declared in ~/.fazm/mcp-servers.json. Parsed at lines 1104 to 1137. Format mirrors Claude Code's mcpServers exactly. Appended to the same servers array as the builtins, then broadcast with builtin: false.

Grep it yourself, four commands

Clone github.com/mediar-ai/fazm, then run the four commands below. Every line of output here is a real artifact of the repo as of April 18 2026.

Verifying the April 14 2026 anchor facts, live

Ten independently verifiable claims

Every bullet here is a grep away in the public Fazm repo. If a claim ever stops being true, the grep will say so.

Grep-verifiable facts

  • acp-bridge/package.json line 13 declares @playwright/mcp ^0.0.68
  • acp-bridge/package.json line 15 declares @agentclientprotocol/claude-agent-acp ^0.29.2
  • acp-bridge/src/index.ts line 63 resolves mcp-server-macos-use under Contents/MacOS
  • acp-bridge/src/index.ts line 1033 passes --output-mode file --image-responses omit --output-dir /tmp/playwright-mcp
  • acp-bridge/src/index.ts lines 1049 to 1054 register Playwright MCP
  • acp-bridge/src/index.ts lines 1057 to 1063 register mcp-server-macos-use
  • acp-bridge/src/index.ts lines 1068 to 1073 register whatsapp-mcp
  • acp-bridge/src/index.ts lines 1081 to 1099 register google-workspace-mcp with PYTHONHOME and PYTHONDONTWRITEBYTECODE
  • acp-bridge/src/index.ts line 1139 calls emitMcpServers(servers) after all five pushes
  • acp-bridge/src/index.ts line 1266 hardcodes the five builtin names as a string Set

Eight April 14 2026 open source projects, re-ranked from the Mac-app seat

The flat roundup gives each project one line. Here is what each of them looks like when the question is: does this end up inside a signed consumer Mac app today, or not?

@playwright/mcp 0.0.68

Pre-1.0 MCP server for Playwright. Fazm ships it at ^0.0.68 in acp-bridge/package.json line 13, tuned with --image-responses omit so a browser-controlling Mac app does not blow its context on base64 PNGs.

OpenAI Codex CLI 0.121.0-alpha.4

Realtime V2 background agent streaming. Not bundled in Fazm, but mentioned on every April 14 roundup as one of the week's open source releases.

Block Goose (4.9K stars)

Open source agent framework. Named in top roundups. Different shape from Fazm: a CLI framework, not a signed Mac app with its own UI.

Hugging Face SmolAgents (4.1K stars)

Framework-level open source agent library. Appears on every top April 14 roundup. Fazm's angle is the shipping consumer surface that sits above frameworks like this.

Meta Llama Stack (6.4K stars)

Deployment stack for Llama family models, including Llama 4 Scout. April 14 roundups cite it as day-one deployment path for the Scout 10M-context release.

Google Agent Development Kit (8.2K stars)

Trending open source agent SDK. Different layer: building agents, not shipping them to non-developer Mac users.

Archon (April 11 release)

First open source tool for deterministic AI program benchmarks. Relevant to anyone measuring whether a five-server bridge like Fazm's actually produces stable tool-call behavior turn over turn.

llama.cpp Vulkan + audio Gemma 4 + Qwen 3

April 14 commits add Vulkan flash-attention, CUDA improvements, and audio support for Gemma 4 and Qwen 3. Relevant to any open source MCP server that wants to run inference on-device.

Roundup framing vs. Fazm's shipping polyglot MCP registry

Nine dimensions on which the usual April 14 2026 open source AI roundup and Fazm's actual source tree disagree. Every cell on the right is tied to a file:line anchor a reader can check.

FeatureTypical April 14 2026 roundupFazm (MIT, github.com/mediar-ai/fazm)
Project formatFlat feed of separate reposFive MCP servers merged into one signed DMG
RuntimesOne per project (Node or Rust or Python)Node + Rust + Python inside one process tree
Integration proofStar counts and release tagsacp-bridge/src/index.ts lines 1027 to 1139
Registry surfaceNot presentBUILTIN_MCP_NAMES at line 1266, broadcast at line 1261
User-extensibleFork the repo~/.fazm/mcp-servers.json (lines 1104 to 1137)
Playwright MCP tuningDefault args--output-mode file --image-responses omit --init-page overlay (line 1033)
Python bundlingpip installBundled venv + PYTHONHOME + PYTHONDONTWRITEBYTECODE (lines 1089, 1092)
Observer tool scopeNot addressedobserver session short-circuits at line 1022 to 1025
Consumer distributionREADME + manual installSigned, notarized DMG, MIT-licensed repo at github.com/mediar-ai/fazm

See the five-server bridge run live on a real Mac

Twenty-minute walkthrough: we open acp-bridge/src/index.ts line 1139, point Fazm at your Playwright MCP tools and a Python stdio server, and run one prompt across three language runtimes in one session.

Book a call

FAQ, on the April 14 2026 five-MCP-server bridge

What were the most talked-about open source AI projects and updates on April 14, 2026?

Every public roundup names roughly the same shortlist. Google's Agent Development Kit (ADK), Meta Llama Stack, OpenAI Codex CLI 0.121.0-alpha.4 with Realtime V2 background agents, Block Goose, Hugging Face SmolAgents, Archon (deterministic AI-program benchmarks, shipped April 11), llama.cpp Vulkan flash-attention plus audio Gemma 4 and Qwen 3, Llama 4 Scout GGUF packs appearing on Hugging Face within hours of the Meta release, and @playwright/mcp 0.0.68 (April 2026). What those roundups never show is what it takes to put more than one of them inside a single signed Mac app that a non-developer can download and run.

What specifically does Fazm do with those projects that the roundups miss?

Fazm ships five MCP servers, across three language runtimes, under one Node-based ACP bridge process. The registration lives at acp-bridge/src/index.ts lines 1027 through 1100. Playwright MCP is registered at lines 1049 to 1054, bundled as @playwright/mcp ^0.0.68 (acp-bridge/package.json line 13). The Rust binary mcp-server-macos-use is resolved at line 63 (`const macosUseBinary = join(contentsDir, "MacOS", "mcp-server-macos-use")`) and registered at lines 1057 to 1063. whatsapp-mcp, another Rust binary, is registered at lines 1068 to 1073. google-workspace-mcp, a Python stdio server, is registered at lines 1081 to 1099. fazm_tools is a Node stdio script at line 56. After all five are pushed, line 1139 calls emitMcpServers(servers) which broadcasts the full list plus a builtin/user flag to the Swift UI. No other top SERP result documents any consumer Mac app wiring five open source MCP servers together this way.

Where is the hardcoded registry that lists the built-in servers?

acp-bridge/src/index.ts line 1266: `const BUILTIN_MCP_NAMES = new Set(["fazm_tools", "playwright", "macos-use", "whatsapp", "google-workspace"]);`. isUserMcpServer at line 1267 negates membership to tag user-added entries, and emitMcpServers at line 1252 packages each server with a builtin boolean before sending it over the bridge transport with type "mcp_servers_available" at line 1261.

What ACP SDK version is the bridge pinned to, and when was it bumped?

@agentclientprotocol/claude-agent-acp ^0.29.2 (acp-bridge/package.json line 15). Commit 95287a32 titled "Update @agentclientprotocol/claude-agent-acp to 0.29.2" landed on April 18 2026, paired with commit 5a1d5a7a updating the package.json range. The registry-broadcast feature itself landed earlier, in commits a40713cd ("Add emitMcpServers call to buildMcpServers") and 261785e0 ("Add emitMcpServers to broadcast MCP servers and builtin status") on April 17 2026, one day before the SDK bump.

Why does it matter that the MCP servers span three language runtimes?

Because the SERP framing treats every open source project as a standalone repo you pip install or npm install or cargo build. A real consumer app has to distribute them as one signed artifact. Fazm does that by bundling a Node runtime for Playwright MCP and fazm_tools, two Rust binaries (mcp-server-macos-use and whatsapp-mcp) under Contents/MacOS, and a full Python venv for google-workspace-mcp under Contents/Resources/google-workspace-mcp/. The Python server is started with PYTHONHOME set to the bundled venv (line 1089) and PYTHONDONTWRITEBYTECODE=1 (line 1092) so the process does not write .pyc files into the app bundle, which would invalidate the code signature and break Sparkle auto-updates. These are the kind of distribution details no open source roundup ever mentions.

Where do user-added MCP servers plug in?

~/.fazm/mcp-servers.json. acp-bridge/src/index.ts lines 1104 through 1137 reads the file, iterates the entries, skips any with enabled: false (line 1115), requires a command field (lines 1116 to 1118), converts the env dict into an Array<{name, value}> shape (lines 1120 to 1125), and pushes each entry onto the same servers array as the built-ins. The format mirrors Claude Code's mcpServers config exactly (documented verbatim at lines 1102 to 1103). After the user entries are appended, line 1139 emits the unified list, and line 1266's BUILTIN_MCP_NAMES set becomes the single source of truth for which servers are tagged builtin: true on the wire.

What Playwright MCP flags does Fazm pass, and why?

acp-bridge/src/index.ts line 1033: `playwrightArgs.push("--output-mode", "file", "--image-responses", "omit", "--output-dir", "/tmp/playwright-mcp")`. Combined with the bridge-side content extractor around line 1100 that strips type:image items, this reduces a per-turn screenshot payload from roughly 500 KB of base64 PNG to around 691 characters of structured YAML snapshot text. Fazm also passes --init-page at line 1037 to inject an on-page visual overlay that tells the human operator the browser is being controlled by Fazm (the file lives at acp-bridge/browser-overlay-init-page.js). Those are three concrete changes to Playwright MCP's default behavior, none of which appear in the @playwright/mcp README.

How does the observer session differ from the main and floating sessions?

acp-bridge/src/index.ts lines 1022 to 1025: if sessionKey is "observer" the function returns early, before the Playwright MCP, macos-use, whatsapp-mcp, and google-workspace-mcp registrations. The observer session therefore only sees fazm_tools (an internal stdio Node script). This is the defense against an observer session accidentally taking an action in a browser tab or a WhatsApp chat: the tools are simply not in its toolbox. Main and floating sessions get all five servers. No open source agent roundup shows this kind of per-session tool-access scoping.

What exactly happens when the user asks Fazm to do something cross-app?

Ten steps. The user types a prompt into the floating bar. ChatProvider forwards session/prompt over the ACP transport. The ACP bridge receives it, and if the MCP servers have not been emitted this session it calls emitMcpServers(servers) at line 1139. The Claude Agent SDK picks the right MCP tool based on the prompt. If the prompt is "book me a flight," the SDK issues a tool_use for mcp__playwright__browser_navigate. If the prompt is "send a WhatsApp reply," it issues mcp__whatsapp__whatsapp_send_message. If the prompt is "click that button in Slack," it issues mcp__macos-use__macos-use_click_and_traverse. The bridge routes the tool call over stdio to the right child process (Node, Rust binary, or Python venv). The child returns a tool_result. The bridge forwards it back as sessionUpdate. The UI renders the tool output. The SDK emits end_turn. All five servers share one conversation, one history, and one model context. No roundup shows this shape because no roundup ships an app.

How can I verify these claims myself?

Clone github.com/mediar-ai/fazm (MIT license). Open acp-bridge/package.json. Line 13: @playwright/mcp ^0.0.68. Line 15: @agentclientprotocol/claude-agent-acp ^0.29.2. Open acp-bridge/src/index.ts. Line 63: macosUseBinary join. Line 1033: Playwright MCP flags. Line 1049 to 1054: Playwright registration. Line 1057 to 1063: macos-use registration. Line 1068 to 1073: whatsapp registration. Line 1081 to 1099: google-workspace registration with the PYTHONHOME and PYTHONDONTWRITEBYTECODE env vars. Line 1139: emitMcpServers call. Line 1252 to 1263: emitMcpServers function body with the mcp_servers_available send call at line 1261. Line 1266: BUILTIN_MCP_NAMES set. Run `git log --since="2026-04-17" --until="2026-04-19" --oneline` and you will see commits a40713cd, 261785e0, 5c6f171e, 2858771b, 83c143a7, 8c5a7b03, a3bb8fac, 7f75da0b, 5a1d5a7a, 95287a32 landing across those three days.

Why is this angle different from the fazm.ai blog roundup on the same date?

The Fazm blog roundup at fazm.ai/blog/new-open-source-ai-projects-github-hugging-face-april-2026 lists April 2026 open source projects from the outside, the same way every other roundup does, because a blog post is a content format that points outward. This guide points inward, at the specific lines of the Fazm source tree where those exact open source projects get bundled into one app. That is the part no roundup covers, including Fazm's own blog.

What is the one headline fact to remember?

acp-bridge/src/index.ts line 1266. Five strings. `"fazm_tools", "playwright", "macos-use", "whatsapp", "google-workspace"`. One consumer Mac app. Three language runtimes. One ACP bridge process. One signed DMG. MIT license. That is the April 14 2026 open source AI projects and tools story that does not show up in the roundups.

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.