Skip to main content

Scribe

Local, privacy-preserving meeting transcription and minutes for macOS. Nothing leaves your machine.

Drop an audio or video file into the app, get a transcript and structured meeting minutes back. Record directly in the app if you prefer. Everything runs on your hardware — no cloud APIs, no data exfiltration, no subscriptions.

What It Does

  1. Speech-to-text via Parakeet TDT — Nvidia's speech model running on Apple MLX (GPU-accelerated on Apple Silicon). ~600MB model, processes audio in 2-minute chunks.
  2. Meeting minutes via any OpenAI-compatible LLM — takes the transcript and produces attendees, agenda, decisions, action items. Works with local models (Qwen, Llama, Mistral via mlx-lm/ollama/vLLM) or remote APIs.
  3. MCP server for LLM tools — Claude Code, Gemini CLI, or any MCP client can transcribe files and generate minutes directly.

Install

Requirements: macOS 15+ on Apple Silicon, Python 3.12+, ffmpeg.

# Install ffmpeg if you don't have it
brew install ffmpeg

# Install the backend
pip install scribe-minutes
# or: uv pip install scribe-minutes

# Start it
scribe
# → Backend running at http://localhost:8890

From source

git clone https://github.com/aaronmontgomery/scribe.git
cd scribe
pip install -e .   # or: uv pip install -e .
scribe

macOS App

The native SwiftUI app provides drag-drop, recording, and a two-pane results view. Requires xcodegen.

brew install xcodegen
make app-install    # builds and copies to /Applications

Or build manually:

cd app
xcodegen generate
xcodebuild -project Scribe.xcodeproj -scheme Scribe_macOS -destination 'platform=macOS' build

Configuration

All configuration is via environment variables. None are required — the backend works out of the box for transcription. Minutes generation needs an LLM.

Variable Default Description
SCRIBE_LLM_URL http://127.0.0.1:18080/v1/chat/completions OpenAI-compatible chat endpoint for minutes
SCRIBE_LLM_MODEL mlx-community/Qwen3.5-35B-A3B-4bit Model name to request
SCRIBE_LLM_HOST (empty) SSH host for auto-tunnel to remote LLM (e.g. my-server)
SCRIBE_LLM_REMOTE_PORT 8080 LLM port on remote host
SCRIBE_LLM_LOCAL_PORT 18080 Local port for SSH tunnel
SCRIBE_LLM_TIMEOUT 300 LLM request timeout (seconds)
SCRIBE_RAG_URL (empty) Optional RAG MCP endpoint for name/role correction
SCRIBE_DEVONTHINK_GROUP (empty) DEVONthink group UUID for export (saves to inbox if unset)

Example setups

Local LLM via Ollama:

export SCRIBE_LLM_URL=http://127.0.0.1:11434/v1/chat/completions
export SCRIBE_LLM_MODEL=qwen2.5:32b
scribe

Remote LLM via SSH tunnel:

export SCRIBE_LLM_HOST=my-gpu-server
export SCRIBE_LLM_REMOTE_PORT=8080
scribe
# Backend auto-creates: ssh -N -L 18080:127.0.0.1:8080 my-gpu-server

Transcription only (no LLM needed):

scribe
# Just use "Transcript Only" mode in the app, or the /transcribe API endpoint

MCP Integration

LLM tools (Claude Code, etc.) can transcribe files directly.

Add to your MCP config:

{
  "scribe": {
    "type": "http",
    "url": "http://127.0.0.1:8890/mcp"
  }
}

Tools:

  • transcribe_file(path, format) — speech-to-text (txt, srt, vtt, json)
  • generate_minutes(path) — transcript + structured minutes
  • batch_minutes(paths) — process multiple files
  • get_latest_output() — read the most recent result

API

Endpoint Method Description
/health GET Backend status
/transcribe POST Upload file → transcript
/transcribe/path?path=... POST Local file → transcript
/minutes POST Upload file → transcript + minutes
/minutes/path?path=... POST Local file → transcript + minutes
/batch/minutes POST Multiple files → batch results
/output/list GET List saved outputs
/output/latest GET Latest output as markdown
/export/devonthink POST Save to DEVONthink (macOS)

Architecture

┌──────────────────────────────────┐
│  SwiftUI App                     │  Native macOS: drag-drop, recording,
│  Record / Open / Batch           │  Liquid Glass UI, keyboard shortcuts
└──────────┬───────────────────────┘
           │ localhost:8890
┌──────────▼───────────────────────┐
│  Python FastAPI Backend          │
│  ├─ Parakeet TDT (STT on MLX)   │  ~600MB, runs on Apple GPU
│  ├─ ffmpeg (audio extraction)    │  video → 16kHz mono WAV
│  ├─ LLM client (minutes)        │  any OpenAI-compatible endpoint
│  └─ /mcp endpoint                │  MCP server for LLM tools
└──────────────────────────────────┘

Three ways to use the same backend:

  1. SwiftUI app — drag-drop GUI
  2. MCP tools — Claude/Gemini/Codex transcribe via tool calls
  3. REST API — curl, scripts, integrations

macOS App Features

  • Drag-drop or Cmd+O for single files, Cmd+Shift+O for batch
  • Built-in audio recorder (click Record, speak, get minutes)
  • Liquid Glass UI (macOS 26+)
  • Two-pane results: transcript left, rendered markdown minutes right
  • Keyboard shortcuts: Cmd+S (save), Cmd+E (DEVONthink), Cmd+Shift+C (copy minutes), Cmd+N (new)
  • Drag transcript/minutes directly into other apps
  • Recent transcriptions on the home screen
  • System notification when processing completes
  • DEVONthink export (macOS)

License

MIT

Metadata

Release files for scribe-minutes 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scribe-minutes 0.1.0
File Size Uploaded Provenance
scribe_minutes-0.1.0.tar.gz 2.3 MB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for scribe-minutes 0.1.0
File Interpreter ABI Platform
scribe_minutes-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.3 MB

Release files / scribe_minutes-0.1.0.tar.gz

Download URL scribe_minutes-0.1.0.tar.gz
Size 2.3 MB
Tags Source
SHA-256 checksum
How to use checksums
7706e988a7929d03747562dbc6ab19308cb64a58ab682c30022e4f92f91d9c80
BLAKE2b-256 checksum
How to use checksums
4c3dd854486f682271315d33a3a3260ac54322f308418ee1fd818fa7bcbe5741
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / scribe_minutes-0.1.0-py3-none-any.whl

Download URL scribe_minutes-0.1.0-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
13005127912b59ca3e8cebd6f6f3fbe4f080753de2f97a24fea1c15be4f3d760
BLAKE2b-256 checksum
How to use checksums
5c7c519b9461f3d624185c58f99971731493a1e430e5884dc06425e87bb1d4cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for scribe-minutes 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page