recall-mcp

recall-mcp

Local semantic search MCP server for markdown docs and Granola meeting transcripts that runs entirely on your machine with no API keys, no cloud, and no cost.

Category
访问服务器

README

recall-mcp

TL;DR: Local semantic search MCP server for markdown docs and Granola meeting transcripts. Ask Claude "what did we decide about X?" and it finds relevant content by meaning. Runs entirely on your machine - no API keys, no cloud, no cost.

Give Claude Code long-term memory over your notes and meetings. It searches by meaning, runs locally, and costs nothing.


What this is

A Model Context Protocol server that indexes your markdown files and Granola meeting transcripts into a local vector database. Claude Code can then search across everything by meaning, not just keywords.

You ask something like "what did we decide about the onboarding flow?" and it surfaces relevant chunks from your docs and meeting recordings, even if those exact words never appeared.

How it works:

Your markdown files + Granola meetings
           |
           v
  Ollama (nomic-embed-text)    <- local embedding model, no API key
           |
           v
       ChromaDB                <- local vector database on localhost:8000
           |
           v
    5 MCP tools                <- Claude Code calls these during conversations

Auto-indexing runs every 15 minutes in the background via a macOS LaunchAgent.

Example

You ask Claude Code: "what did we decide about the onboarding flow?"

recall-mcp searches your docs and meeting transcripts by meaning and returns the relevant chunks:

Source: meetings/product-sync-2026-03-14.md (similarity: 0.82)
"We agreed to cut the walkthrough video and ship a checklist instead.
Jamie owns the copy, targeting next sprint."

Source: docs/onboarding/decisions.md (similarity: 0.79)
"Checklist approach approved — three steps max, no modal,
inline in the dashboard."

Claude uses these results to answer your question with the actual context from your notes and meetings.

Works with

recall-mcp uses the standard MCP stdio transport, so it works with any MCP-compatible client:

Client Config file
Claude Code (CLI) ~/.claude.json
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json
Cursor Cursor settings > MCP
Windsurf ~/.codeium/windsurf/mcp_config.json

The MCP config block is the same across all of them. This README uses Claude Code as the example, but the server doesn't care which client connects to it.

Note: Setup requires comfort with the terminal, or the ability to point your AI tool at this repo and ask it to set things up for you. For example, you can paste this README into Claude Code or Claude Desktop and ask it to clone the repo and run the setup script on your behalf.


Prerequisites

  • macOS (LaunchAgent setup is macOS-specific; the core server works anywhere)
  • Node.js 18+ - brew install node
  • Ollama - ollama.com or brew install ollama
  • uv (for running ChromaDB) - brew install uv
  • Granola desktop app - granola.ai - only needed if you want meeting transcript search

Setup

1. Clone and build

git clone https://github.com/thetenzinwoser/recall-mcp.git
cd recall-mcp
npm install
npm run build

2. Install the embedding model

brew services start ollama
ollama pull nomic-embed-text

First pull is ~274MB. After that it's cached.

3. Run setup

./scripts/setup.sh

This will:

  • Ask where your markdown docs live (DOCS_PATH)
  • Write a .env file
  • Generate LaunchAgent plists from templates and load them
  • Start ChromaDB and schedule auto-indexing
  • Run an initial index of your docs and Granola transcripts
  • Print the MCP config block to paste into Claude Code

4. Add to your MCP client

Add this to your client's MCP config (see the "Works with" table above for file locations):

"recall": {
  "type": "stdio",
  "command": "node",
  "args": ["/absolute/path/to/recall-mcp/dist/server.js"]
}

Use the exact path printed at the end of setup.sh. Then restart your client. In Claude Code, run /mcp to confirm it connected.


Tools

Tool What it does
semantic_search Search docs and transcripts by meaning. Accepts query, optional limit (1-20), optional sourceTypes filter.
get_transcript Fetch a full meeting transcript. Accepts meetingId, searchTitle (with optional date), or listRecent.
reindex_docs Re-scan your docs folder. Incremental - only processes changed files.
index_granola_transcripts Pull and index new Granola meetings. Accepts limit and clearExisting.
index_status Show chunk counts by source type.

get_transcript details

  • Title search with date: { searchTitle: "team sync March 14" } - extracts the date and fuzzy-matches the title
  • Explicit date: { searchTitle: "team sync", date: "2026-03-14" } - when multiple meetings share a title
  • Partial ID: First 8 characters of a meeting UUID is enough
  • List recent: { listRecent: 20 } to browse recent meetings with IDs

Configuration

All settings have sensible defaults. The only one most people need is DOCS_PATH.

Copy .env.example to .env and edit:

cp .env.example .env
Variable Default Purpose
DOCS_PATH ~/docs Folder to scan for markdown files (recursive)
OLLAMA_URL http://localhost:11434 Ollama endpoint
EMBEDDING_MODEL nomic-embed-text Model to use for embeddings

ChromaDB runs on localhost:8000 by default. This is not configurable without editing the LaunchAgent plist directly.


Granola integration

recall-mcp reads your Granola auth token from the Granola desktop app's local data. No separate API key or login needed - just have Granola installed and signed in.

Auth token location: ~/Library/Application Support/Granola/supabase.json

If you don't use Granola, the doc indexing still works fine. Transcript-related tools will return errors, which Claude handles gracefully.


Manual commands

Reindex now (instead of waiting for the 15-min interval):

cd /path/to/recall-mcp && npx tsx src/scripts/auto-index.ts

Check ChromaDB is running:

curl -s http://localhost:8000/api/v2/heartbeat

Check what's indexed:

# Use the index_status MCP tool, or check logs:
tail -f /path/to/recall-mcp/logs/auto-index.log

Rebuild after pulling updates:

npm run build

Restart ChromaDB:

launchctl unload ~/Library/LaunchAgents/com.recall.chromadb.plist
launchctl load ~/Library/LaunchAgents/com.recall.chromadb.plist

Troubleshooting

semantic_search returns nothing / MCP not connecting

  • Run /mcp in Claude Code to check server status
  • Make sure dist/server.js exists (npm run build)
  • Verify the path in ~/.claude.json is absolute and correct

ChromaDB not running

curl -s http://localhost:8000/api/v2/heartbeat
# Should return: {"nanosecond heartbeat": ...}

If it fails, check logs/chromadb-stderr.log or reload the LaunchAgent.

Ollama errors

ollama list
# nomic-embed-text should appear

If not: ollama pull nomic-embed-text

Granola auth fails Make sure the Granola desktop app is installed and you're logged in. The token file should exist at ~/Library/Application Support/Granola/supabase.json.

Results feel stale Force a reindex: npx tsx src/scripts/auto-index.ts. The auto-indexer only picks up file changes and new meetings - if you renamed files or restructured folders, a manual run helps.


Stack

Component Version Purpose
@modelcontextprotocol/sdk ^1.27.0 MCP server framework
chromadb ^1.10.0 Vector database client
ollama (nomic-embed-text) - Local embeddings, 768 dimensions
glob ^10.0.0 File scanning
zod ^3.23.8 Config validation

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选