MacParsley

AI apps (the MCP server)

MacParsley includes a small built-in server that lets AI apps (Claude, Cursor, LM Studio, VS Code and others that speak MCP, the Model Context Protocol) look at your library and, if you allow it, work on it. You can then ask things like:

  • "What did we agree with Acme last week?"
  • "List the open action items from my one-on-ones this month."
  • "Summarize my last call again as an executive brief."
  • "Move today's recordings into the Customers folder and tag them."

The server is off by default. It runs only while MacParsley is open, listens on this Mac only, and every request needs an API key you create.

Turn it on

  1. Open Settings → MCP.
  2. Switch on Let AI apps connect to MacParsley. The status shows a green Running at http://127.0.0.1:8721/mcp. (Change the port if something else uses 8721, then press Return.)
  3. Click API Keys…, then New Key…, give it a name (the app that will use it), and choose its kind.

Settings → MCP

The two kinds of key

Read OnlyRead & Write
Look at meetings, summaries, transcripts, highlights, mind mapsYesYes
Search; list folders, tags, speakers, promptsYesYes
See what is being transcribed or summarizedYesYes
Rename or move meetings; folders; tags; name speakersNoYes
Move meetings to Deleted Items, restore themNoYes
Start work: transcribe, summarize, write mind maps, import audioNoYes
Write files out of the library (export)NoYes
Stop a call recordingNoYes

A read-only key never even sees the write tools. If an app calls one anyway, it gets a plain refusal ("this key is read only"). Because summarizing uses your AI models (which may be cloud models), it needs a Read & Write key.

The API Keys window

Keys are kept in your Keychain. The API Keys… window shows each key's name, kind, when it was made and last used, and what it may see. You can Copy Key, Rename… or Revoke… (the app using it stops working at once).

Limit a key to some folders

In the New Key window, tick Only some folders and choose folders. The key then sees those folders and everything inside them, and nothing else: not other folders, and not meetings that aren't in a folder. It can't move things out of its folders, or make folders outside them. Use this to give a tool access to, say, only Customers.

Connect an app

The Connect App window

In Settings → MCP, click Connect App…. Choose the app in the list, choose your key at the top, and follow the numbered steps. Each setup has a Copy button and already contains your key (it's shown shortened on screen). The apps are Claude Desktop, Claude Code, ChatGPT, Codex, Cursor, LM Studio, VS Code, Gemini CLI and Other apps.

Claude Code

Copy the command, paste it into Terminal and press Return. It looks like:

claude mcp add --transport http macparsley http://127.0.0.1:8721/mcp --header "Authorization: Bearer YOUR_KEY"

Cursor, LM Studio and other apps that take a URL

Copy the setup and paste it into the app's MCP settings (Cursor: Settings → Tools & MCP; LM Studio: Program → Install → Edit mcp.json):

{
  "mcpServers": {
    "macparsley": {
      "url": "http://127.0.0.1:8721/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

(Some apps call the field serverUrl or put "type": "http" beside the URL; use whatever that app's documentation shows for a remote HTTP server with a header.)

Claude Desktop

Claude Desktop only starts local programs from its config file, so MacParsley gives it a tiny bridge made of bash and curl (both part of macOS; nothing to install).

  1. Copy the Claude Desktop setup.
  2. In Claude Desktop open Settings → Developer → Edit Config. This opens claude_desktop_config.json.
  3. Add the copied "mcpServers": { … } block at the top level of that file, next to anything already there (not inside "preferences"). Mind the commas between sections. If the file is otherwise empty, paste the whole thing.
  4. Quit Claude Desktop with ⌘Q and reopen it. Start a new chat; "macparsley" should appear in the tools menu.

Codex (OpenAI)

Codex reads its servers from ~/.codex/config.toml. The key goes in an environment variable, so it isn't kept in the file.

  1. Add the copied block to ~/.codex/config.toml:
[mcp_servers.macparsley]
url = "http://127.0.0.1:8721/mcp"
bearer_token_env_var = "MACPARSLEY_MCP_KEY"
  1. Add the copied export MACPARSLEY_MCP_KEY="…" line to ~/.zshrc and open a new Terminal window.
  2. Start Codex and type /mcp to check that macparsley is listed.

VS Code (Copilot) and Gemini CLI

VS Code: run MCP: Open User Configuration from the Command Palette and paste the copied "servers" block; then choose Agent mode in Copilot Chat. Gemini CLI: add the copied "mcpServers" block to ~/.gemini/settings.json and type /mcp to check it.

ChatGPT

ChatGPT's connectors only reach servers on the internet over HTTPS, and MacParsley's server is deliberately reachable from this Mac only, so ChatGPT can't connect to it directly. The simple route is to use Codex or Claude. If you still want ChatGPT, you would have to put the server on a public address with a tunnel (Cloudflare Tunnel, ngrok), then add it under ChatGPT's Settings → Connectors (with Developer Mode on) using the key as a bearer token. That makes your meetings reachable by anyone who gets the key: use a Read Only key limited to one folder, and turn the tunnel off when you're done.

Menu names and file locations in these apps change from version to version. If a step doesn't match, the app's own documentation for "remote MCP server with a bearer token" has the current wording.

MacParsley has to be open, with the server on, whenever the AI app uses it.

What an AI app can do

Tools: looking (every key)

ToolWhat it does
library_overviewHow many meetings, folders, tags, speakers; what's running now.
list_folders, list_tags, list_speakersThe library's structure and people.
list_promptsThe summary prompts and their ids.
list_meetingsMeetings with filters: folder (and subfolders), tag, speaker, source, dates, has-summary, sort, paging.
search_meetingsWords in titles, summaries and transcripts, like the app's search box.
get_meetingOne meeting's details: folder, tags, speaker labels, attachments, what content exists.
get_summaryThe summary text, or the list of versions, or an older version.
get_transcriptThe transcript with speaker names and times, paged.
get_highlightsPlaud highlights.
get_mind_mapA mind map as an indented outline (concise or detailed).
list_jobsWhat is being transcribed or summarized.
recording_statusWhether a call is being recorded, and for how long.

Tools: changing things (Read & Write keys)

ToolWhat it does
update_meetingChange a title and/or move to a folder.
set_tagsAdd tags (creating any that don't exist) and remove tags.
create_folder, update_folderMake, rename or move folders.
assign_speakerSay who a speaker label is. Teaches MacParsley that voice.
trash_meeting, restore_meetingTo and from Deleted Items. Never erases.
transcribe_meetingQueue transcription.
summarize_meetingQueue a new summary (optionally with a chosen prompt). It uses the app's AI model, which may be a cloud model; a sensitive recording still asks you first.
write_mind_mapHave the AI model write the concise mind map.
import_audioAdd an audio file from this Mac (m4a, wav, mp3, ogg).
export_meetingWrite a summary, transcript, mind map, audio or the whole ZIP into a folder on this Mac (default Downloads). Never overwrites a file.
stop_recordingStop a call MacParsley is recording.

Starting a recording is deliberately not offered. Recording people stays a decision made at the Mac.

Resources

An AI app can attach a meeting's text directly: macparsley://meeting/<id>/summary, …/transcript, …/highlights, …/mindmap, and macparsley://library/folders. The 50 newest summaries are listed for browsing; any other meeting works by its id.

Prompts

MacParsley's 60+ summary prompts are offered as MCP prompts. Pick one in the AI app, give it a meeting, and the app receives the finished prompt plus the transcript, to run with its own model. This is a way to use a different AI for one summary without adding its API key to MacParsley.

Safety

  • Local only. The server binds to 127.0.0.1, and requests that appear to come from a web page are refused.
  • A key is required, compared in a way that doesn't leak how close a guess was.
  • Recording text is labelled as data. Transcripts and summaries come back inside <untrusted-meeting-data> tags with a reminder to the AI that they are not instructions, which helps against text hidden in a recording.
  • Nothing is permanently deleted. Trashing moves to Deleted Items.
  • See what happened. Recent Activity in Settings lists each call: which key, which tool, when. A refused attempt is marked.
  • What the AI app does with the text is up to that app and its provider. Remember that Claude, ChatGPT and similar apps send what they read to their company.

Technical notes

For people building their own client.

TransportMCP over HTTP: JSON-RPC 2.0 messages in the body of POST /mcp. Replies are plain JSON (no streaming, no sessions). GET returns 405.
Addresshttp://127.0.0.1:<port>/mcp (default port 8721)
AuthAuthorization: Bearer mpk_ro_… or mpk_rw_…
Protocol versions2025-06-18, 2025-03-26, 2024-11-05
Capabilitiestools, resources, prompts (no list-changed notifications, no subscriptions)
Errors401 missing or wrong key, 403 web origin, 400 unreadable message. A tool that fails returns a normal result with isError: true and the reason.

Tool arguments use ids from the library (meeting_id, folder_id) as shown in the list_… results; dates are ISO 8601 or yyyy-MM-dd.

← AI models and privacySettings reference →