Guide · Claude & MCP

Ask Claude about your meetings

Gabriele Spilotri Cavaiola · October 2026 · 5 min read

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

ToolWhat it does
list_meetingsMeetings newest first, with date, title, length and participants; filter by date range or text.
search_meetingsA word or phrase across every transcript; returns the matching lines with meeting and minute.
get_meetingSummary, decisions, action items, bookmarks and (optionally) the full transcript of one meeting, or latest.
list_action_itemsAction items from the summaries: open, done or all, from a date, for a person.
complete_action_itemTick an item off. Off until you allow it.
start_recording, stop_recording, bookmarkControl 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

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

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:

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.

Get Overheard