# silverstein/minutes: Local Meeting Transcription That Claude Code and Other MCP Clients Can Query

> Minutes is an MIT-licensed Rust app that records and transcribes meetings on-device into Markdown files under ~/meetings/, then exposes them to Claude Code, Codex, Cursor or any MCP client. It is for engineers who want their conversation history as plain files rather than a hosted workspace.

**silverstein/minutes** — Open-source, local-first Granola/Otter alternative that Claude Code, Codex, Cursor, and any MCP client can query. Meetings, calls, and voice memos transcribed on-device into markdown you own.

- Repository: https://github.com/silverstein/minutes
- Website: https://useminutes.app
- Stars: 1,505 · Forks: 165
- Language: Rust
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/silverstein-minutes

## The problem Minutes targets: meeting history trapped in a hosted workspace

Most meeting assistants store transcripts in a vendor workspace. You get a web UI and an API, and the retrieval layer belongs to the vendor. Minutes takes the opposite position. The README describes it as a "local conversation memory" app: capture and transcription run on-device, and the record is a Markdown file with YAML frontmatter written to `~/meetings/`. The stated audience is agent-first users who search meetings through Claude Code, Cursor, Codex, OpenCode, MCP or the CLI, then fold the useful parts into a vault or wiki. A second audience is desktop notetaker users who mostly stay in the app and care about setup, Recall, documents and summary quality. The README is explicit that transcription and speaker processing never leave the machine, and that text leaves only when you send authorized context to a cloud agent or summarizer. That split is the whole design: local capture, optional cloud reasoning.

## How the pieces fit: capture, on-device transcription, Markdown, MCP

The Cargo workspace shows the architecture. `crates/core` holds shared logic, `crates/cli` builds the 58-command command line, `crates/reader` handles reading, and `crates/whisper-guard` wraps the speech path. Transcription uses `whisper-rs` 0.16 with the `tracing_backend` feature, which the Cargo.toml comments explain routes whisper.cpp and ggml C-level logs through the Rust tracing subscriber so the `whisper_vad_detect_speech` line does not flood the terminal during a recording. Audio capture uses `cpal` with pipewire and realtime features. File watching uses `notify`, which is what lets external edits to the Markdown show up without a restart. A separate `crates/sherpa-plugin` is deliberately excluded from the workspace because building it downloads the whole sherpa-onnx bundle; the comment says it ships separately from the binaries by design. On the other side of the boundary, `minutes-mcp` is published on npm and exposes 34 tools, so an MCP client never touches the audio, only the meeting files. The data flow is short: microphone to local model to Markdown with YAML frontmatter to MCP tool call.

## Installing Minutes and asking your agent a real question

The README lists four install paths. Homebrew covers the desktop app and the CLI, cargo covers the CLI alone, and npx runs the MCP server without a global install.

```bash
brew install --cask silverstein/tap/minutes
brew install silverstein/tap/minutes
cargo install minutes-cli
npx minutes-mcp  # or: claude mcp add minutes -- npx -y minutes-mcp
```

If Homebrew reports an untrusted tap, the README says to run `brew trust silverstein/tap` once. The README does not document rollback or an uninstall procedure.

The fastest way to see whether the retrieval is useful is the seeded demo, which needs no microphone. Register the MCP server with Claude Code, then load five sample meetings and ask about them.

```bash
claude mcp add minutes -- npx -y minutes-mcp
minutes demo --full
```

The README gives this example question: "What did we decide about monthly billing, and did it stick?" The stated answer spans two meetings a month apart, launched on Feb 28 and reversed on Mar 25. An MCP client can also call the tool directly with `search_meetings({"query":"monthly billing decision"})`. When you are done, `minutes demo --clean` removes the samples. For real capture, run `minutes record`, then `minutes stop` to transcribe.

## The Markdown contract, and why it constrains your tooling

The output format is the part most likely to decide adoption. Each meeting is a Markdown file with YAML frontmatter carrying `title`, `type`, `date`, `duration`, `context`, plus `action_items` with `assignee`, `task`, `due` and `status`, and a `decisions` list. The README shows a Q2 pricing discussion with one open action item and one decision. Because the record is plain text, the README states the files work with Obsidian, grep and any Markdown tool. That is a genuine advantage over a hosted workspace: you can version the directory, write your own scripts against it, or drop it into a wiki. It is also a constraint. The MCP tools read this schema, so if you import notes from elsewhere with different field names, the retrieval layer has less to work with. The frontmatter schema is documented separately at `docs/architecture/frontmatter-schema.md`, and that file is the one to read before pointing Minutes at an existing vault.

## Where Minutes is the wrong tool

The privacy model only holds if you keep the loop local. The README is direct that if you choose a cloud AI assistant or summarizer, the meeting context you authorize is sent to that provider. So the common setup, local transcription plus a hosted model for summaries, is a partial win: the audio stays home, the content does not. Anyone whose threat model forbids transcript text leaving the machine has to run a local summarizer too, and the README does not promise one. Second, this is a desktop and CLI product. The surfaces table lists a desktop app, a CLI, an MCP server, a Claude Code plugin and a TypeScript SDK. There is no hosted web workspace, so a teammate on a laptop without the app cannot pull up yesterday's call in a browser. Third, the project moves fast: three releases landed between 2026-09-05 and 2026-09-10, and the changelog titles read like fixes to live transcription and microphone overload handling. A fast release cadence on a local recorder means you should expect to update it, and the README's install docs cover updating but the README itself does not describe a version-pinning strategy.

## How it differs from Granola, Otter and Anarlog

The README's comparison table puts four workflows side by side. Granola and Otter are hosted products with hosted MCP and hosted integrations respectively, and both store data in a hosted workspace with cloud transcription. Anarlog (formerly Hyprnote) is the closest in spirit: a local meeting notepad with CLI and MCP access, storing in local SQLite plus files, with local AI available through local providers. Minutes differs from Anarlog mainly in storage format and in the AI boundary. Minutes stores local Markdown plus YAML rather than SQLite, so the record is directly editable and greppable, and it pairs local transcription with the AI provider of your choice rather than bundling one. The README also notes that Anarlog's community app is MIT while its enterprise components use a commercial license, whereas Minutes states it is MIT and staying that way, with no relicensing and no paid tier for anything in the repo. If you want a database-backed local app, Anarlog is the more natural fit. If you want files you can read in a text editor and feed to an agent, Minutes is the closer match.

## Licence, maintenance and upgrade cost

Minutes is MIT licensed, and the README commits to that permanently: no relicensing and no paid tier for anything in the repository. For a tool that stores your meeting history, the licence matters less than the file format, because the Markdown files survive the project. You can stop using Minutes and keep every transcript. The repository is not archived and the last push was on 2026-09-10, ten days before this writing, with v0.26.2 released the same day. That is a live project, but the release titles suggest the transcription pipeline is still being tuned rather than frozen, so plan for periodic upgrades. The workspace pins a Rust toolchain via `rust-toolchain.toml` and pins dependency versions in `Cargo.lock`, which makes source builds reproducible; the Homebrew and npm paths do not give you that control. One packaging detail worth knowing before you build from source: `crates/sherpa-plugin` is excluded from the workspace because building it downloads the sherpa-onnx bundle, and it ships separately from the binaries. This is not legal advice; if you redistribute the binaries, read the LICENSE and NOTICE files yourself.

## Conclusion

Adopt Minutes if you already work inside an MCP client and want transcripts as Markdown you can grep, diff and commit. Skip it if you need a hosted workspace with mobile capture or if you are not willing to run a local speech model. Before installing, check whether the Homebrew tap needs brew trust, and read docs/architecture/frontmatter-schema.md so your existing notes match the schema the MCP tools expect.

## FAQ

### Does Minutes send my meeting audio to the cloud?

No. The README states that transcription and speaker processing run on-device and that audio stays on your machine. Text leaves the machine only when you send authorized context to a cloud agent or summarizer.

### Where does Minutes store my meeting notes?

As Markdown files with YAML frontmatter in `~/meetings/`. The README says the files work with Obsidian, grep and any Markdown tool.

### How do I add Minutes to Claude Code?

The README gives `claude mcp add minutes -- npx -y minutes-mcp`, which registers the MCP server. You can then seed sample meetings with `minutes demo --full` and ask about them without a microphone.

### What license is Minutes under?

MIT. The README states the project is staying MIT, with no relicensing and no paid tier for anything in the repository.

## Sources

- [License: MIT](https://github.com/silverstein/minutes/blob/main/LICENSE)
- [Project website](https://useminutes.app)
- [README](https://github.com/silverstein/minutes/blob/main/README.md)
- [Releases](https://github.com/silverstein/minutes/releases)
- [silverstein/minutes on GitHub](https://github.com/silverstein/minutes)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/silverstein-minutes
