Connect Cursor to Earkeep

Last updated: · Reviewed quarterly

Earkeep installs a small command, earkeep-mcp, so other tools on your machine can search and read your saved meetings. Cursor starts it and talks to it directly, so this is one entry in one JSON file with no bridge in the middle. Add it globally, or per project when only one repository needs it.

What you are connecting to

Every time Earkeep opens, it puts the command at ~/.local/bin/earkeep-mcp, pointing into the app. Cursor launches it when it needs it and talks to it over standard input and output. The command reads your transcript files straight from disk, so it works whether or not Earkeep is running, and it opens no port: there is no address at which anything off your device could reach it.

It offers two tools, and both are read-only. Nothing connected here can create, edit or delete a meeting.

  • search_spans finds saved meetings by a case-insensitive match on their title or notes, or lists all of them when you don't give it a query. Newest first, twenty at a time.
  • read_span takes one meeting's id and returns that meeting plus the transcript lines it covers.

Worth knowing before you write a prompt: search matches titles and notes, not the words inside transcripts.

Set it up

Open Earkeep once, so the command is in place. Then add the entry to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one repository for just that project. Cursor's own Settings → MCP → Add new global MCP server opens the first of those files for you.

json
{
  "mcpServers": {
    "earkeep": {
      "command": "/Users/you/.local/bin/earkeep-mcp"
    }
  }
}

Replace you with your username. The path has to be absolute, because this file does not expand ~. Easier still: open Settings → MCP in Earkeep, which gives you this same block with your own path already in it, ready to copy.

If you already have other servers in there, add earkeep beside them inside the existing mcpServers object instead of adding a second one.

Or over HTTP. Earkeep also serves the same tools at a loopback address while the app is running. Use this entry instead if you would rather connect by URL; the port is the default, and Settings → MCP shows the real one:

json
{
  "mcpServers": {
    "earkeep": {
      "url": "http://127.0.0.1:8730/mcp",
      "type": "streamableHttp"
    }
  }
}

Per project or global? Global if you want a meeting to be one question away wherever you are working. Per project when the meetings only matter to one repository, or when you share a machine and would rather not have the connection present by default.

Check it works

Open Settings → MCP in Cursor. Earkeep should be listed with its tools discovered. Then ask for something only it can answer:

"Use the earkeep tools to find the last meeting about this project and turn what was decided into a checklist."

Real titles from your own week mean the connection is live.

If something goes wrong

Earkeep doesn't appear in the MCP list. The file has to be valid JSON, and Cursor may need reopening. A trailing comma is the usual culprit, and it fails silently.

It is listed but shows no tools. The server could not start: the path is wrong or the command is missing. Check it in a terminal:

shell
ls -l ~/.local/bin/earkeep-mcp

If nothing is there, open Earkeep once and it puts the command in place. If it is there, compare the path in your config with the one in Settings → MCP: a ~, or a username that isn't yours, is the usual mistake. If something else is at that path, Earkeep leaves it alone rather than overwrite a file you put there; move it aside and open Earkeep again, or use "command": "/Applications/Earkeep.app/Contents/MacOS/earkeep" with "args": ["mcp"].

You connected over HTTP and it shows no tools. That route needs Earkeep running, and the port in Settings → MCP has to match.

The project file isn't being read. A per-project .cursor/mcp.json applies to the folder you opened. Opening a subfolder of the repository leaves it out of scope.

It connects but finds nothing. The server searches saved meetings, so a day that was captured but never had a span kept from it has nothing to find.

Related

Frequently asked questions

Global or per project?

Global puts your meeting history one question away in every project. Per project keeps it scoped to the repository it matters to. Both use the same entry; only the file differs.

Can it change or delete my meetings?

No. The server is read-only. It can search meetings and read them, and there is no tool for anything else.

Does this send my transcripts to Cursor?

Earkeep's side stays on your device: the command reads files on your own disk and nothing leaves the machine through it. Cursor calls its model provider's API, so a transcript you ask it to read is a transcript you have sent to that provider.

Do I have to keep Earkeep open?

Not for the earkeep-mcp command, which reads your files from disk whether or not the app is running. The HTTP address does need the app open, because that server lives inside it.

Does the server need an account or an API key?

No. It runs on your own machine and has nothing to authenticate against.

Your meetings, where you already work

14-day full trial, no account required.