Skip to main content

meetings-mcp

An MCP server over the output of my meeting-transcription-pipeline. It takes the finished transcripts (Whisper text, speaker labeled with pyannote) and exposes them as tools any MCP-capable AI client can call.

The pipeline turns a recording into a long text file. Thats useful, but nobody rereads two hours of meeting. With this server a model can list the meetings, page through one, or search all of them for a topic and come back with the exact timestamp.

Tools

Tool What it does
list_meetings() Every transcript with its id, length, turn count and speaker count
get_transcript(meeting, start) One page of 25 speaker turns, with the start value for the next page
search_transcripts(query) Case-insensitive search across all meetings, with meeting id, timestamp and turn number per hit

Setup

pipx install meetings-mcp

uvx meetings-mcp works too if you prefer no install. Hacking on a clone instead:

python3 -m venv .venv
.venv/bin/pip install mcp

Wire it into Claude Code:

claude mcp add meetings -- meetings-mcp

Running from a clone, point it at the venv instead:

claude mcp add meetings -- /path/to/meetings-mcp/.venv/bin/python /path/to/meetings-mcp/meetings_mcp.py

Demo

What it looks like from Claude Code:

> did we talk about the renewal in any recent meeting?

⏺ meetings · list_meetings()

  2 meeting(s):
  - 2026-09-21-vendor-review: 00:41:09, 4 turns, 3 speaker(s)
  - 2026-09-24-weekly-sync: 00:18:47, 3 turns, 2 speaker(s)

⏺ meetings · search_transcripts("renewal")

  3 match(es) for 'renewal':

  [2026-09-21-vendor-review @ 00:03:12, turn 1] Speaker 2: The renewal quote came in higher, about fifteen percent.
  [2026-09-21-vendor-review @ 00:07:40, turn 2] Speaker 1: Then we push back on the renewal before Friday.
  [2026-09-24-weekly-sync @ 00:12:30, turn 1] Speaker 2: The renewal is signed, same price as last year.

⏺ Yes, twice. In the vendor review the quote came in about 15% higher
  and the plan was to push back. By the weekly sync it was signed at
  last year's price.

The meetings above are demo data. The format is exactly what the server returns.

Design notes

  • Read-only by construction. Every tool reads text files, nothing writes. The transcripts stay on my machine and the model only sees what a tool returns.
  • Pseudonyms at the boundary. Speaker labels become Speaker 1, Speaker 2 and so on by first appearance, even when the source file has real names. Emails, phone numbers, home paths and long tokens get replaced before anything crosses the protocol.
  • Paged, not dumped. A two hour meeting is hundreds of turns. The server hands it over 25 turns at a time so a model reads what it needs instead of flooding its context.

Honest notes

  • It reads the pipeline's transcripts/ folder, one .speakers.txt per meeting, falling back to the raw Whisper .txt when diarization hasnt run. You need to run the pipeline first. The default path is my local copy. Point MEETINGS_DATA_DIR at your own data folder.
  • The redaction is pattern based. It catches speaker labels, emails, phone numbers and paths, but a name spoken inside a sentence still comes through as said.
  • Search is a plain substring match, so an Arabic query has to match the spelling Whisper produced.
  • The logic is tested against synthetic transcripts in test_server.py. Run python test_server.py.

About

Al Amin Bashir Afara, Dubai · github.com/aminafara123 · linkedin.com/in/aminafara

Release files for meetings-mcp 1.0.1

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

Source distribution (sdist)

Source distribution for meetings-mcp 1.0.1
File Size Uploaded
meetings_mcp-1.0.1.tar.gz 5.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for meetings-mcp 1.0.1
File Interpreter ABI Platform
meetings_mcp-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 12.2 kB

Release files / meetings_mcp-1.0.1.tar.gz

Download URL meetings_mcp-1.0.1.tar.gz
Size 5.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ea6ea1cf4d276e574de381e714f73fbf45fa50876d62a416921f340e75d37a91
BLAKE2b-256 checksum
How to use checksums
4157267b59499c0b24b83104addeaaec27dd3dcbcd891b72f683de617f4415f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / meetings_mcp-1.0.1-py3-none-any.whl

Download URL meetings_mcp-1.0.1-py3-none-any.whl
Size 6.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
280e94127037b77d86ca65f3122ec9bd8ce4ca88356abc4154fc74cd5f0fb550
BLAKE2b-256 checksum
How to use checksums
806d1433975d5fc5910016883912dc7521fe229adea7645f23a7a0d9c419b113
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

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