Demo
https://github.com/user-attachments/assets/94470e99-c0f6-4e35-9d03-b28efa362b3b
Quick Install
macOS (Apple Silicon & Intel):
curl -fsSL https://artifacts.videodb.io/call.md/install | bash
After installation:
- Launch Call.md from Applications or Spotlight
- Grant system permissions when prompted (Microphone and Screen Recording required)
- Register with your VideoDB API key (get one free)
Platform Support
| Platform | Installer | Status |
|---|---|---|
| macOS 12+ (Apple Silicon & Intel) | curl command above |
Supported |
| Windows | — | Not available yet (#29) |
| Linux | — | Not available yet |
There is no Windows installer today. The blocker is not the Electron app —
that builds on Windows and Linux — but the capture engine underneath it:
@videodb/recorder ships
binaries for darwin-x64 and darwin-arm64 only. With no Windows binary there
is nothing to record microphone, system audio or screen with, so the app now
says so up front instead of failing partway into a meeting.
You can still build and run everything around recording (UI, MCP servers, workflows, exports) on Windows and Linux — see Building for other platforms. Follow #29 for Windows support.
Overview
Call.md turns meetings into live agent loops. It records locally, transcribes in real-time (you vs them), and provides live intelligence during calls. When the meeting ends, it generates summaries with action items and can send data to your workflow automation platforms.
Features
During the Meeting (Live Intelligence)
- Dual-Channel Transcription - Separate transcription for you (mic) vs them (system audio), powered by VideoDB
- Transcription Language - Pick the meeting language in Settings → Transcription, or leave it on Automatic
- Live Assist - AI generates contextual suggestions: things to say, questions to ask
- Conversation Metrics - Real-time monitoring of talk ratio, speaking pace (WPM), questions asked, monologue detection
- Coaching Nudges - Gentle rate-limited alerts when conversation needs steering
- MCP Auto-Triggering - Detects information needs from conversation and calls your MCP tools automatically
- MCP Results Panel - Inline display of tool outputs (markdown, links, structured data) during meetings
- Bookmarking - Mark important moments for easy reference later
Post-Meeting Intelligence
- AI-Generated Summaries - Three parallel extractions:
- Short overview (narrative summary)
- Key points by topic (attributed to participants)
- Action items (concrete next steps)
- Structured Export - Markdown export with full transcript, summary, and metrics
- Workflow Webhooks - Auto-send meeting data to n8n, Zapier, or CRMs when meeting ends
Meeting Preparation
- Meeting Setup Wizard - AI-generated probing questions based on meeting description
- Dynamic Checklist - AI creates discussion checklist from meeting context
- Google Calendar Integration - Sync upcoming meetings
Privacy & Storage
- 2 Hour Recording Limit - Recordings stop themselves after 2 hours of recording time, with a warning 5 minutes before
- Local-First - SQLite database, all data stored on your machine
- Screen & Audio Recording - Capture screen, microphone, and system audio simultaneously
- Recording History - Browse and review past recordings with full transcripts
- VideoDB Integration - Transcription and AI features require internet connectivity
How It Works
During Recording:
- Captures dual-channel audio (you vs them) and sends to VideoDB for real-time transcription via WebSocket
- Runs live intelligence: metrics tracking, coaching nudges, and AI-generated assists
- MCP agent automatically detects information needs and triggers relevant tools
After Recording:
- Generates three-part summary: narrative overview, key points, and action items
- Sends meeting data to workflow automation platforms (n8n, Zapier, CRMs)
- Exports to markdown with full transcript and intelligence
Tech Stack
- Electron 34 - Desktop application framework
- TypeScript 5.8 - Full type safety across main and renderer processes
- React 19 - Modern UI framework with concurrent features
- Tailwind CSS + shadcn/ui - Utility-first styling with high-quality component primitives
- tRPC 11 - End-to-end type-safe API layer between main and renderer
- Hono - Fast HTTP server for tRPC API endpoints
- Drizzle ORM + SQLite - Type-safe database operations with local storage
- Zustand - Lightweight state management
- VideoDB SDK (0.2.4) - Screen recording, transcription, and video processing
- MCP SDK (1.0.0) - Model Context Protocol for tool integrations
- OpenAI SDK (6.19.0) - LLM calls via VideoDB's OpenAI-compatible API
- Vite - Fast frontend bundling and hot module replacement
Prerequisites
- macOS 12+ (Monterey or later) — required for recording, see Platform Support
- VideoDB API Key (console.videodb.io)
- System permissions: Microphone and Screen Recording
For development: Node.js 18+ and npm 10+
Getting Started (Users)
-
Install:
curl -fsSL https://artifacts.videodb.io/call.md/install | bash -
Launch the app and enter your VideoDB API key (get one free)
-
Grant permissions when prompted (Microphone and Screen Recording)
-
Start Recording - Click "New Meeting" and begin your first session
The app will transcribe in real-time, show live assists, and generate a summary when you're done.
Getting Started (Developers)
-
Clone the repository:
git clone https://github.com/video-db/call.md.git cd call-md -
Install dependencies:
npm install -
Rebuild native modules for Electron:
npm run rebuild -
Start development mode:
npm run dev -
Register with your VideoDB API key when the app opens
Available Scripts
| Command | Description |
|---|---|
npm run dev |
Start development mode (main + renderer with hot reload) |
npm run build |
Build TypeScript and React for production |
npm run dist:mac |
Build macOS distributable DMG |
npm run dist:win |
Build Windows NSIS installer (recording unsupported, see below) |
npm run dist:linux |
Build Linux AppImage (recording unsupported, see below) |
npm run typecheck |
Run TypeScript type checking |
npm run test |
Run unit tests |
npm run lint |
Run ESLint |
npm run rebuild |
Rebuild native modules for Electron |
npm run db:generate |
Generate database migration files |
npm run db:migrate |
Apply database migrations |
Building for other platforms
electron-builder is already configured for Windows (NSIS) and Linux (AppImage), so you can produce an installer on those platforms:
npm install && npm run rebuild && npm run dist:win
Build on the target OS. Cross-building is not supported here because
better-sqlite3 is a native module that has to be rebuilt for the host.
What works in such a build: the full UI, MCP servers, workflows, settings, history, and markdown export. What does not: starting a recording — the VideoDB capture engine has no binary for the platform, and the app returns a clear error rather than crashing. Track #29 for progress.
MCP Server Setup
Connect MCP servers in Settings → MCP Servers:
- Click Add Server
- Choose transport: stdio (local) or http (remote)
- Configure and click Connect
The MCP agent runs automatically during meetings, detects information needs from conversation, and triggers relevant tools. Results appear inline in the MCP Results panel.
Development
Project Structure
src/
├── main/ # Electron Main Process
│ ├── db/ # Database layer (Drizzle + SQLite)
│ ├── ipc/ # IPC handlers
│ ├── lib/ # Utilities (logger, paths, permissions)
│ ├── server/ # HTTP server (Hono + tRPC)
│ │ └── trpc/ # tRPC router and procedures
│ └── services/ # Business logic
│ ├── copilot/ # Meeting intelligence services
│ │ ├── context-manager.service.ts
│ │ ├── conversation-metrics.service.ts
│ │ ├── nudge-engine.service.ts
│ │ ├── sales-copilot.service.ts # Core orchestrator
│ │ ├── summary-generator.service.ts
│ │ └── transcript-buffer.service.ts
│ ├── mcp/ # MCP orchestration and tool execution
│ │ ├── connection-orchestrator.service.ts
│ │ ├── intent-detector.service.ts
│ │ ├── mcp-agent.service.ts
│ │ ├── tool-aggregator.service.ts
│ │ └── result-handler.service.ts
│ ├── live-assist.service.ts
│ ├── mcp-inference.service.ts
│ ├── llm.service.ts
│ └── videodb.service.ts
├── preload/ # Preload scripts (IPC bridge)
├── renderer/ # React Frontend
│ ├── api/ # tRPC client
│ ├── components/ # UI components
│ │ ├── auth/ # Authentication modal
│ │ ├── calendar/ # Calendar integration UI
│ │ ├── copilot/ # Meeting intelligence UI
│ │ ├── history/ # Recording history views
│ │ ├── home/ # Home screen
│ │ ├── icons/ # Icon components
│ │ ├── layout/ # App layout (sidebar, titlebar)
│ │ ├── mcp/ # MCP results/status components
│ │ ├── meeting-setup/ # Meeting prep wizard
│ │ ├── recording/ # Recording controls & live assist
│ │ ├── settings/ # Settings editors
│ │ ├── transcription/ # Live transcription panel
│ │ └── ui/ # shadcn/ui components
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utilities
│ └── stores/ # Zustand state stores (session, copilot, mcp)
└── shared/ # Shared types & schemas
├── schemas/ # Zod validation schemas
└── types/ # TypeScript types
IPC API
The app exposes IPC APIs through the preload script:
window.electronAPI.mcp.*- MCP server and tool operationswindow.electronAPI.mcpOn.*- MCP event subscriptions
Permissions (macOS)
The app requires the following permissions:
- Microphone - For voice recording
- Screen Recording - For screen capture
Grant these in System Preferences > Privacy & Security.
Troubleshooting
Recording not starting:
- Check microphone and screen recording permissions in System Settings
- Verify VideoDB API key is valid
Transcription not appearing:
- Ensure mic and system audio are enabled in settings
- Wait 5-10 seconds for first transcripts
- Check internet connectivity
A recording stopped on its own:
- Recordings are capped at 2 hours and stop automatically when they reach it. You get a system notification 5 minutes before, and the recording is saved and summarised exactly as if you had pressed Stop
- Paused time does not count toward the limit, so the cutoff matches the elapsed timer shown during the meeting
- To change the cap, edit
MAX_RECORDING_DURATION_MSinsrc/shared/constants/recording.tsand rebuild
Transcription is in the wrong language:
- Set the meeting language in Settings → Transcription (it applies to the next recording, not one already in progress)
- If transcripts still come back in English, the language is not yet supported
by the VideoDB transcription backend. The app sends
language_codeand falls back to the engine default rather than failing — see #25
Development issues:
- Rebuild native modules:
npm run rebuild - Check Node.js version (requires 18+)
- Review logs:
~/Library/Application Support/call-md/logs/
Data Storage
Application data is stored in:
~/Library/Application Support/call-md/
├── config.json # Settings; credentials encrypted at rest
├── data/
│ └── call-md.db # SQLite database
└── logs/
└── app-YYYY-MM-DD.log # Daily log files
Security
Everything below stays on your machine; only audio, video and prompts go to VideoDB.
- Credentials at rest — the VideoDB API key in
config.jsonand in the SQLiteuserstable is encrypted through the OS keychain (Keychain on macOS, DPAPI on Windows, libsecret on Linux). Access tokens are stored as SHA-256 digests, never in the clear. MCP server env vars, HTTP headers and OAuth tokens are encrypted with AES-256-GCM under a keychain-wrapped key. - Local API — the tRPC server binds to
127.0.0.1only and accepts CORS requests from loopback origins, so nothing on your network can reach it. Every procedure except registration requires a valid access token. - File permissions — the app data directory is
0700and the database, config, tokens and logs are0600. - Renderer — both windows run with
contextIsolation, no Node integration, and the Chromium sandbox enabled. The API key is never written to localStorage. - Webhooks — workflow URLs are validated at save time and at call time. Non-HTTP(S) schemes, embedded credentials, redirects, and hosts that resolve to loopback, private, link-local or cloud-metadata addresses are rejected, so a webhook cannot be used to reach inside your network.
- Logs — credential-shaped fields are redacted before anything is written.
Upgrades migrate existing data in place on first launch; you do not need to log in again. Report security issues via GitHub Issues.
Community & Support
- Documentation: docs.videodb.io
- Issues: GitHub Issues
- Discord: Join community
- API Key: VideoDB Console
No comments yet
Be the first to share your take.