Sana
FreeNot checkedYour Sana.AI meeting transcripts, synced to your machine and searchable offline. An MCP server so AI agents can read and correct them, plus a terminal app for b
About
Your Sana.AI meeting transcripts, synced to your machine and searchable offline. An MCP server so AI agents can read and correct them, plus a terminal app for browsing them yourself.
README
Give any AI agent instant, local access to your Sana.AI meeting
transcripts - it runs a background daemon that syncs them into a local database,
unlocking search, read, summarize, and more through a single
MCP tool (meeting_transcripts) and a CLI.
One static binary, about 14 MB. Nothing to install alongside it.
macOS / Linux:
curl -fsSL https://github.com/laelhalawani/sana-mcp/releases/latest/download/install.sh | sh
Windows (PowerShell):
irm https://github.com/laelhalawani/sana-mcp/releases/latest/download/install.ps1 | iex
The installer downloads the binary for your OS and CPU, finds the AI clients on
your machine, asks which to connect, signs you in to Sana, and shows your
meetings downloading. Then run sana-mcp.
Linux x64/ARM64, macOS x64/Apple Silicon, and Windows x64/ARM64 are published.
What it does
Sana has no public API for meetings. sana-mcp drives the same web backend the
Sana app uses (tRPC at sana.ai/x-api) with your logged-in session, over HTTPS
with a cookie jar. No browser is required, so it runs headless on macOS,
Linux, Windows, and WSL.
- A background daemon downloads your meetings, transcripts, and metadata into a local SQLite database, then checks periodically for new ones.
- The agent tools read only from that database, so they respond instantly and
never block on the network. The sole exception is
recording, which fetches a short-lived link on demand. - Everything - session, database, logs - stays on your machine.
Features
- One tool for agents -
meeting_transcripts- with built-in discovery:helplists everything,help {tool}shows exact arguments. - List, read, search transcripts, plus summaries, participants, and on-demand recording links.
- Search - line-level SQLite FTS5 with BM25 ranking, phrase and date-range filters, and sort options.
- Automatic sync - a background daemon starts itself whenever you use sana-mcp, polls for new meetings, retries incomplete downloads, and never re-downloads a transcript it already has.
- Correct transcription errors - and keep the original. See below.
- Works with your client - registers with Claude Desktop, Claude Code, Cursor, VS Code, Codex, Gemini CLI, Windsurf, Zed, Cline, Roo Code, Amazon Q, Continue, opencode.
- Local-first and private - no data leaves your machine except authenticated requests to Sana.
Agent tools
Agents call one tool, meeting_transcripts, with a tool name and an optional
args object:
meeting_transcripts("<tool>", { ...args })
| tool | args | returns |
|---|---|---|
help |
{tool?} |
all tools, or one tool's schema |
login |
{email}, then {email, confirmation_code} |
passwordless sign-in by email code |
status |
(none) | sync progress and coverage |
list |
{page?, limit?, query?, sort?, filter?} |
meetings: id, timestamp, title, status |
read |
{meeting_id, full?, lines?, timestamps?} |
transcript lines, all or a [start,end] range |
search |
{query, page?, limit?, sort?, filter?} |
matching lines with meeting id and line number |
summary |
{meeting_id} |
summary, notes by topic, action items |
participants |
{meeting_id} |
attendees (name, email, host) |
recording |
{meeting_id} |
a temporary recording link, fetched live |
edit_line |
{meeting_id, line, expected_text, new_text} |
corrects one line |
line_history |
{meeting_id, line?} |
what was changed, original and current |
restore_line |
{meeting_id, line} |
puts a line back to what Sana delivered |
meeting_transcripts("search", {"query": "pricing", "sort": "newest"})
meeting_transcripts("read", {"meeting_id": "v72HzzJDZx9WqTmF", "lines": [22, 26]})
Full schemas and semantics: docs/tool-contract.md.
Use it from the CLI
sana-mcp # the full-screen application
sana-mcp status # sync progress
sana-mcp list # meetings, newest first
sana-mcp search pricing # search every transcript
sana-mcp read <meeting-id> 20 40
sana-mcp configure # change which clients are connected
sana-mcp daemon --stop
A bare sana-mcp opens the application on a terminal, and serves MCP without
one - so a client that runs the binary with no arguments still gets a server.
Fixing transcription errors
Transcripts come from speech recognition, and it gets names wrong. A discussion about Akeneo can be transcribed as Antek, and then no search for "Akeneo" will ever find it.
You can correct any line - in the application (e to edit, ctrl+s to save,
h for history) or through the tools. Corrections are safe by construction:
- Nothing is destroyed. What Sana delivered is kept forever, shown beside every change, and restoring is one key.
- A correction survives a re-sync. Edits re-attach by content, so they follow their line even when re-transcription shifts the numbering. One that no longer matches anything is kept and marked, never applied to the wrong line.
- Both spellings stay searchable. The corrected name finds the line; what was actually said still finds it too, ranked well below.
A warning that also sits in the tool description and on the edit screen: meeting
transcripts are full of product, company and personal names that look like
misspellings and are not - Crawlera, Akeneo, Spobik are real. An agent must
never edit a transcript unless you asked for that specific correction.
Where things live
Everything is under ~/.sana-mcp: the SQLite database, your session, the daemon
log, and the binary itself in bin/.
sana-mcp uninstall removes all of it. It lists what it is about to remove and
asks first: the client registrations, that directory, every copy of the binary
the installers have written (including ~/.local/bin, where an older version
put it), and the PATH line they added to your shell profile. It stops any
running daemon first, by asking each installed binary to stop its own - a daemon
started by a different version only answers to that version.
Note that the database holds your corrections, which cannot be re-synced from Sana. It is not purely a cache.
Installing over an older version
An older version's database cannot be read by this one. The installer checks for that before it writes anything, says what continuing costs - your meetings are downloaded again, and you may have to sign in again - and asks. Nothing is deleted until the new setup succeeds, so cancelling or a failure part-way through puts the old state back exactly as it was.
Development
go vet ./... && go test ./... && go test -race ./...
Live tests exercise the real API with your stored session; they are read-only,
write to temporary databases, and are skipped unless SANA_LIVE=1.
Releasing is bumping VERSION and merging to main.
See AGENTS.md for the constraints that are load-bearing, docs/tool-contract.md for the agent surface, and docs/app-design.md for the application.
License
GPL-3.0
Installing Sana
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/laelhalawani/sana-mcpFAQ
Is Sana MCP free?
Yes, Sana MCP is free — one-click install via Unyly at no cost.
Does Sana need an API key?
No, Sana runs without API keys or environment variables.
Is Sana hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Sana in Claude Desktop, Claude Code or Cursor?
Open Sana on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
wenb1n-dev/SmartDB_MCP
A universal database MCP server supporting simultaneous connections to multiple databases. It provides tools for database operations, health analysis, SQL optim
by wenb1n-devPostgres Server
This server enables interaction with PostgreSQL databases through the Model Context Protocol, optimized for the AWS Bedrock AgentCore Runtime. It provides tools
by madhurprashPostgres
Query your database in natural language
by AnthropicPostgreSQL
Read-only database access with schema inspection.
by modelcontextprotocolCompare Sana with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All data MCPs
