Ask Claude about your meetings
You already ask Claude about your code, your docs and your tickets. The one thing it can't see is what was said in last Tuesday's call. Here's how to give Claude Code, Claude Desktop or Codex your meeting transcripts — and get answers with the date and the minute.
What it looks like
> what did we decide about the Acme launch?
● overheard · search_meetings("Acme launch")
└ 4 lines in 1 meeting
● On Tue 14 Oct (11:30, Teams) you agreed to move the launch to Friday
[02:14]. Marco will send the new timeline tonight [02:31].
Claude doesn't guess or summarize from memory: it calls a tool that searches your transcripts, reads the matching lines, and cites where they came from. The [02:14] is the minute in the recording, so you can go back and listen.
How it works
The piece in the middle is an MCP server. The Model Context Protocol is how Claude Code, Claude Desktop and Codex talk to local tools: the client starts a small program, and they exchange JSON-RPC messages over stdin and stdout. Nothing listens on the network.
Overheard records your calls from the Mac menu bar and saves each one as plain files in ~/Meetings — transcript.md, summary.md, the audio. The same app, started with --mcp, is the server: it reads those files and answers Claude's tool calls.
The tools Claude gets
| Tool | What it does |
|---|---|
list_meetings | Meetings newest first, with date, title, length and participants; filter by date range or text. |
search_meetings | A word or phrase across every transcript; returns the matching lines with meeting and minute. |
get_meeting | Summary, decisions, action items, bookmarks and (optionally) the full transcript of one meeting, or latest. |
list_action_items | Action items from the summaries: open, done or all, from a date, for a person. |
complete_action_item | Tick an item off. Off until you allow it. |
start_recording, stop_recording, bookmark | Control the recording from Claude. Off until you allow it. |
The read-only tools are always there. The ones that change something only appear after you turn them on in Settings → Claude & other AIs (MCP).
Set it up
Install Overheard (from GitHub Releases or brew install --cask anonbeat1/tap/overheard), record a meeting, then pick one of these.
One click
In Overheard, open Settings → Claude & other AIs and click Connect to Claude. It registers the server with every client it finds: Claude Code, Codex and Claude Desktop.
The Claude Code plugin
If you live in Claude Code, the plugin adds the same server plus three commands:
/plugin install overheard --marketplace anonbeat1/overheard
/overheard:recap— decisions, action items and open questions of a meeting, each with its minute/overheard:followup— a ready-to-send follow-up email (a draft; it never sends anything)/overheard:todo— your open action items across meetings, grouped by call
Use the plugin or Connect to Claude, not both, or Claude will see every tool twice.
By hand
It's a normal stdio server, so you can add it yourself:
# Claude Code
claude mcp add --scope user overheard -- /Applications/Overheard.app/Contents/MacOS/Overheard --mcp
# Codex
codex mcp add overheard -- /Applications/Overheard.app/Contents/MacOS/Overheard --mcp
For Claude Desktop, add it to claude_desktop_config.json:
{
"mcpServers": {
"overheard": {
"command": "/Applications/Overheard.app/Contents/MacOS/Overheard",
"args": ["--mcp"]
}
}
}
Things worth asking
- "What was I asked to do this week?" — Claude calls
list_action_itemsand groups what's yours by meeting. - "Draft the follow-up email for the Acme call." — it reads the meeting with
get_meetingand writes the recap, decisions and next steps. - "Which meetings talked about the budget?" — a
search_meetingsacross every transcript, with the minute of each mention. - "Turn the decisions from today's design review into GitHub issues." — this is where it gets interesting: in Claude Code, your meetings and your repository are in the same conversation.
- "Start recording." — if you've allowed actions, Claude can start and stop the recording or bookmark a moment.
A note on safety
A transcript is words spoken by everyone on the call, and anything in your context can steer a model. Overheard is built with that in mind:
- The tools that change anything are off by default; reading is all Claude can do until you say otherwise.
- The plugin's skills tell Claude to treat transcript text as content, never instructions.
- When Overheard itself asks Claude Code for a summary, it runs it with no tools, no MCP servers and an empty working folder — so whatever someone says in a call stays text.
- The server only speaks over stdio to the client that started it, and only reads
~/Meetings.
Under the hood
The whole server is one Swift file, MCPServer.swift, under 300 lines. The transport, simplified, is a loop over stdin:
while let line = readLine(strippingNewline: true) {
guard let msg = try? JSONSerialization.jsonObject(with: Data(line.utf8)) as? [String: Any] else { continue }
guard let id = msg["id"] else { continue } // notifications get no reply
switch msg["method"] as? String {
case "initialize": reply(id, result: ["capabilities": ["tools": [:]], ...])
case "tools/list": reply(id, result: ["tools": tools.filter { writeEnabled || !$0.write }.map(\.json)])
case "tools/call": reply(id, result: ["content": [["type": "text", "text": try call(name, args)]]])
...
}
}
No SDK, no dependencies: MCP over stdio is newline-delimited JSON-RPC, and for a handful of tools that reply with text, a switch is enough. The tools read the Markdown files directly; the ones that control the recording go through the running app with an overheard:// URL.
Overheard
Records your calls from the menu bar, transcribes them on your Mac, and makes them answerable from Claude. Free and open source.