{"slug": "show-hn-daisy-local-first-meeting-recorder-for-mac-with-an-mcp-server", "title": "Show HN: Daisy – Local-first meeting recorder for Mac with an MCP server", "summary": "Daisy, a local-first meeting recorder for Mac released on GitHub and at mydaisy.io, transcribes meetings on-device and runs a local MCP server on port 54321 so Claude Desktop, Claude Code, Cursor or Codex can search and read recorded sessions. The app requires Apple Silicon (M1 or later) and macOS 14 Sonoma or later, stores audio, transcripts, summaries and speaker voice fingerprints as plain files under ~/Library/Application Support/Daisy, and sends transcript text to a cloud summarizer only after the user enables it. Daisy's MCP server exposes read tools (list_sessions, get_session, search_sessions, list_folders, list_destinations), local edit tools (set_session_title, rename_speaker) and action tools (resummarize_session, route_session_to_destination, route_action_to_destination) that are off by default.", "body_md": "A Mac app that records your meetings and transcribes them on-device, with a local MCP server so Claude can read your calls.\n\n- **[Latest release on GitHub](https://github.com/ca33u/daisy-app/releases/latest)** or**[mydaisy.io](https://mydaisy.io)** — the same signed, notarized DMG.\n- Apple Silicon (M1 or later), macOS 14 Sonoma or later. Intel Macs are not supported: the DMG is a universal build, but Intel builds are untested. The Apple Intelligence summarizer and the Apple SpeechAnalyzer dictation engine need macOS 26.\n- Updates arrive in the app through Sparkle.\n\n- **Stays on the Mac:** audio, transcripts, summaries and speaker voice fingerprints, as plain files under`~/Library/Application Support/Daisy` (or a folder you pick). Transcription and speaker separation run on-device. No account, no telemetry, no analytics SDK.\n- **Leaves only after you turn it on:** transcript text, never audio, to the cloud summarizer you set up (Anthropic, OpenAI, Kimi or Cursor on your key, or your ChatGPT account); meeting titles and attendee names to Anthropic web search if you enable attendee research; a session you send to Notion, Linear, Slack, a webhook or another MCP server; session text, summaries, voice fingerprints and screenshots to your own iCloud if you turn on iPhone sync (audio never goes through the cloud); Google sign-in if you connect Google Calendar.\n- **Otherwise the network sees:** the update check and download from`mydaisy.io` , and the one-time download of the speech models you chose from`huggingface.co` (on macOS 26, Apple's speech engine fetches its language files from Apple).\n- **Check it yourself in ten minutes:** block Daisy in a firewall, set the summarizer to Apple Intelligence or a local model, record a meeting, and you still get a transcript and a summary. The steps and the hosts the app can reach are at[https://mydaisy.io/verify-local](https://mydaisy.io/verify-local) .\n\nDaisy runs an MCP server inside the app, so Claude Desktop, Claude Code, Cursor or Codex can search and read your meetings.\n\n1. In Daisy, open **Settings → Connections → MCP server** and turn on**MCP server** .\n2. Next to **Claude Desktop** , click the connect button. Daisy writes the entry into`claude_desktop_config.json` for you, access token included (Claude Desktop runs it through`npx` , so Node.js must be installed). Restart Claude Desktop.\n3. Ask Claude something like *\"What did we decide about the launch date in last week's calls?\"*\n\nTo add it by hand, put this into `~/Library/Application Support/Claude/claude_desktop_config.json` (the token is on the same screen, under **Privacy → Access token → Copy**):\n\n```\n{\n  \"mcpServers\": {\n    \"daisy\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote@0.1.38\",\n        \"http://127.0.0.1:54321/sse\",\n        \"--transport\",\n        \"sse-only\",\n        \"--allow-http\",\n        \"--header\",\n        \"Authorization: Bearer <access token from Daisy>\"\n      ]\n    }\n  }\n}\n```\n\n`mcp-remote` bridges Claude Desktop's stdio to Daisy's local HTTP endpoint. Clients that speak HTTP themselves can use `http://127.0.0.1:54321/mcp` directly.\n\nTools:\n\n|  | Tools | What they do | \n|---|---|---|\n| **Read** | `list_sessions` ,`get_session` ,`search_sessions` ,`list_folders` ,`list_destinations` | Read your sessions, folders and configured destinations. | \n| **Edit, local** | `set_session_title` ,`rename_speaker` | Rename a session or name a speaker. Reversible: set the old title again, or pass an empty name to clear a speaker (a voice profile saved by the rename stays until you forget it in Settings). | \n| **Act, off by default** | `resummarize_session` ,`route_session_to_destination` ,`route_action_to_destination` | Regenerate a summary (replaces the stored one; uses your summarizer, which may be a cloud provider), or send a session or one next step to Notion, Linear, Slack, a webhook or another MCP server. Each send creates a new page, issue or message there. Enabled only after you turn on **Privacy → Allow actions from MCP clients** . | \n\nNo tool can delete a session, audio or a transcript, or change Daisy's settings.\n\nHow the server is fenced:\n\n- It binds to `127.0.0.1` only, so nothing outside your Mac can reach it, and it rejects requests whose`Host` or`Origin` is not local.\n- New setups require a bearer token kept in the Keychain, so other programs on your Mac can't read your transcripts without it.\n- The default port is `54321` ; you can change it under**Advanced** on the same screen.\n\nMore: [https://mydaisy.io/docs/mcp](https://mydaisy.io/docs/mcp).\n\nApache License 2.0. You can use, modify and redistribute the code, including commercially, as long as you keep the license and copyright notices. Full text in [`LICENSE`](https://github.com/ca33u/daisy-app/blob/main/LICENSE).\n\nThree capture modes, one app:\n\n- **Meetings** — records both sides of a call (your mic + the other side via system-audio loopback), no bot joining the meeting. On-device transcription + diarization (`Remote A` /`Remote B` , with optional mic-side attribution), a summary, action items, and a draft follow-up. Optional extras include periodic screenshots with on-device OCR, a preparation brief built from the agenda and past sessions, evidence-backed progress against the meeting plan, local meeting analytics, and custom meeting apps beyond the built-in list.\n- **Push-to-talk dictation** — hold a hotkey, speak, and the text is pasted at your cursor in any app. Three on-device engines: Whisper (default), Parakeet (FluidAudio) for lower latency, and Apple SpeechAnalyzer on macOS 26 (zero download). A custom-vocabulary dictionary fixes names/jargon, an optional voice profile learns your phrasing, and a rolling 24-hour history lets you re-copy.\n- **Voice notes** — quick one-off thoughts saved to your Library. Optional: import existing**Apple Voice Memos** as flat transcripts (on-device, opt-in, needs Full Disk Access).\n\nAround the edges: morning and end-of-day summaries on Home, an opt-in keyboard-layout auto-fixer (retypes text entered in the wrong layout, with undo and per-app exceptions), and provider-returned ChatGPT plan-window usage plus local token accounting for API providers. The UI is localized in English and Russian.\n\nThe differentiator: Daisy ships a **local MCP server** bound to `127.0.0.1` that exposes your sessions as a queryable, actionable data source to any MCP client (Claude Desktop, Cursor, Codex). Because the transcript is already local, Daisy can be a local-only MCP source — something cloud meeting tools structurally can't offer.\n\nRequirements:\n\n- Xcode 26+ (ships the macOS 26 SDK the project builds against). The app itself runs on macOS 14+.\n- An active Apple Developer account if you want a signed local build (unsigned builds are fine for development inside Xcode)\n\nClone and open:\n\n```\ngit clone https://github.com/ca33u/daisy-app.git\ncd daisy-app\nopen Daisy.xcodeproj\n```\n\nThe Swift Package Manager dependencies (Sparkle, WhisperKit via [`argmax-oss-swift`](https://github.com/argmaxinc/argmax-oss-swift), FluidAudio) resolve on first project load. Hit Run; the app launches.\n\n```\nDaisy/                  → SwiftUI app sources (PBXFileSystemSynchronizedRootGroup)\nDaisyTests/             → unit tests\nBenchmarks/             → reproducible WER/DER/JER scorer, product runner, and public evidence\nDaisy.xcodeproj/        → Xcode project\nscripts/\n  release.sh            → end-to-end release: archive → notarize → DMG → sign → Sparkle appcast\n  release-notes/        → per-version markdown bullets consumed by release.sh\n  dmgbuild_settings.py  → dmgbuild config (Python) for the installer DMG\n  assets/               → DMG background, app icons\nbuild/                  → archive output (gitignored)\nRELEASING.md            → branch/channel model and the release/promote/hotfix flows\n```\n\nKey services that drive the app:\n\n- `CoreAudioMicRecorder` — CoreAudio mic capture with route-change recovery and the archive`.caf` writer (replaced the old AVAudioEngine tap to fix route-change/Bluetooth dropouts)\n- `SystemAudioCapture` /`ProcessTapAudioCapture` — the remote side of a meeting. The main path on macOS 14.4+ is a Core Audio process tap (the smaller \"System Audio Recording Only\" permission; it keeps working with Bluetooth output).`SCStream` loopback is the fallback: on older macOS, before the tap permission is granted or after it is refused, when the tap fails to start, or when it hears nothing that`SCStream` does. Silent-capture detection and warnings\n- `Transcriber` /`WhisperEngine` — WhisperKit on-device transcription with a Silero VAD pre-pass\n- `ParakeetEngine` /`AppleSpeechEngine` — the two alternative dictation engines: FluidAudio Parakeet-TDT (low latency) and Apple SpeechAnalyzer (macOS 26, no model download); Whisper is the default\n- Diarization + speaker memory — FluidAudio (Pyannote) labels remote voices; named speakers are remembered locally by a short voice fingerprint\n- `DictationPaste` — pastes dictated text at the cursor via the Accessibility API, restoring your prior clipboard\n- `RecordingSession` — orchestrates a session, owns calendar binding and auto-stop scheduling\n- `Summarizer` — multi-provider LLM dispatch: Apple Intelligence (on-device), ChatGPT account, Anthropic, OpenAI, Kimi (Moonshot), Cursor API key, Ollama, LM Studio (local), or an MCP summarizer\n- `SensitiveDataProtector` — optional on-device pseudonymization/redaction boundary for supported remote summaries\n- `MeetingPreparation` /`MeetingPlanAnalysis` /`MeetingAnalytics` — pre-meeting context, evidence-backed agenda progress, and local call metrics\n- `ScreenshotCapture` — opt-in periodic screenshots of the meeting window with Vision OCR; screen text flows into the transcript and summary\n- `PreMeetingBrief` /`MorningBrief` /`EndOfDaySummaries` — local briefs assembled from your calendar and past sessions, plus an evening digest\n- `VoiceProfile` — opt-in personalization learned from your dictations (and, optionally, your mic side of meetings)\n- `LayoutAutoFix` — opt-in keyboard-layout auto-correction via a CGEvent tap, with undo and per-app exceptions\n- `TokenLedger` — local token-usage accounting per cloud provider, shown on Home\n- `MCPServer` — the local MCP server on`127.0.0.1` ; exposes ten tools (five read, two local edits, three opt-in actions) to Claude Desktop / Cursor / Codex\n- `VoiceMemoScanner` /`VoiceMemoIngestor` — opt-in, on-device import of Apple Voice Memos to Markdown transcripts\n- Sparkle 2 — in-app auto-updates against `https://mydaisy.io/appcast.xml`\n\n[`Benchmarks/`](https://github.com/ca33u/daisy-app/blob/main/Benchmarks) contains the product-pipeline runner, a neutral\nstandard-library scorer for WER/CER/DER/JER, fixtures, and published raw\nevidence. The first public baseline is AMI `ES2004a`: Daisy 1.0.7.59 detected\n4/4 speakers with 15.68% DER and 20.28% JER at a median 0.122× real time\nacross three warm runs on an M4 MacBook Air. It is one reproducible\ndiarization case, not a general accuracy\nclaim; Humla and OpenWhispr remain unscored until their raw output exists for\nthe exact same audio. See the [methodology and publication gate](https://github.com/ca33u/daisy-app/blob/main/Benchmarks/README.md)\nand the [public evidence](https://github.com/ca33u/daisy-app/blob/main/Benchmarks/reports/public).\n\n```\nDAISY_AUTO_PUSH=1 ./scripts/release.sh <shortVersion> <buildNumber> [stable|beta]\n```\n\nBeta is the default channel from `main`; stable is promoted from a soaked beta with `./scripts/release.sh promote <version>` (no rebuild). Six steps: archive → export → notarize → DMG → publish to the [daisy-web](https://github.com/ca33u/daisy-web) repo → inject an `<item>` into `appcast.xml` and commit. Vercel auto-deploys the site within a couple of minutes. Every stable version also becomes a [GitHub Release](https://github.com/ca33u/daisy-app/releases) with the same DMG (`./scripts/release.sh github-release <version>`). Full branch/channel model and the hotfix flow are in [` RELEASING.md`](https://github.com/ca33u/daisy-app/blob/main/RELEASING.md).\n\nRelease notes for each version go in `scripts/release-notes/<shortVersion>.md` as a flat markdown bullet list (`- one line per change`). The script extracts those bullets and embeds them in the appcast `<description>` so Sparkle shows them in its update sheet.\n\n- Chat with the community → [Discord](https://discord.gg/JYCZRZXy6j)\n- Questions, ideas, show-and-tell → [GitHub Discussions](https://github.com/ca33u/daisy-app/discussions)\n- Product issues, feature requests → file an issue on this repo or email **[support@mydaisy.io](mailto:support@mydaisy.io)**\n- Security disclosures → see [`SECURITY.md`](https://github.com/ca33u/daisy-app/blob/main/SECURITY.md)\n- Procurement / security review / tailored deployment → email **[hello@mydaisy.io](mailto:hello@mydaisy.io)**\n- End-user docs → [https://mydaisy.io/docs](https://mydaisy.io/docs) · Privacy →[https://mydaisy.io/privacy](https://mydaisy.io/privacy)\n\n- [Sparkle](https://sparkle-project.org) — in-app auto-updates\n- [WhisperKit](https://github.com/argmaxinc/argmax-oss-swift) by Argmax — Apple Silicon Whisper inference (part of the Argmax OSS SDK)\n- [FluidAudio](https://github.com/FluidInference/FluidAudio) — Parakeet ASR + speaker diarization\n- [FoundationModels](https://developer.apple.com/documentation/foundationmodels) — on-device summarization via Apple Intelligence (macOS 26+)", "url": "https://wpnews.pro/news/show-hn-daisy-local-first-meeting-recorder-for-mac-with-an-mcp-server", "canonical_source": "https://github.com/ca33u/daisy-app", "published_at": "2026-10-07 08:18:06+00:00", "updated_at": "2026-10-07 08:49:12.458341+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "agent-protocols", "ai-agents"], "entities": ["Daisy", "Claude Desktop", "Claude Code", "Cursor", "Codex", "Anthropic", "OpenAI", "mydaisy.io"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-daisy-local-first-meeting-recorder-for-mac-with-an-mcp-server", "markdown": "https://wpnews.pro/news/show-hn-daisy-local-first-meeting-recorder-for-mac-with-an-mcp-server.md", "text": "https://wpnews.pro/news/show-hn-daisy-local-first-meeting-recorder-for-mac-with-an-mcp-server.txt", "jsonld": "https://wpnews.pro/news/show-hn-daisy-local-first-meeting-recorder-for-mac-with-an-mcp-server.jsonld"}}