Skip to main content

Local semantic search for markdown notes — MCP server

Project description

mcp-recall-md

Local semantic search for your markdown notes — via MCP.

PyPI version Python versions License


graph LR
    A["<b>.md files</b><br><i>Obsidian · Logseq · plain md</i>"] -- "watch + index" --> B["<b>mcp-recall-md</b><br><i>local vector store</i>"]
    C["<b>AI client</b><br><i>Claude · Cursor · Windsurf</i>"] -- "MCP search" --> B
    style A fill:#f9f4eb,stroke:#c9a96e,color:#333
    style B fill:#e8f0fe,stroke:#4a86c8,color:#333
    style C fill:#e8f5e9,stroke:#5b9a5b,color:#333

"Search my notes about Kubernetes networking"

→ finds kubernetes-networking.md (similarity: 0.53) — even though you phrased it differently than the note


  • Search by meaning, not keywords — finds notes even when your wording doesn't match
  • 100% offline — no API keys, no cloud, nothing leaves your machine
  • Zero config — point at your folders, restart your AI client, done
  • Real-time sync — file watcher picks up changes instantly, re-embeds only what changed

Quick start

Add to your MCP client config and restart:

{
  "mcpServers": {
    "mcp-recall-md": {
      "command": "uvx",
      "args": ["mcp-recall-md", "--vaults", "C:/Users/you/notes"]
    }
  }
}

Config file location: .mcp.json (Claude Code) · claude_desktop_config.json (Claude Desktop) · Cursor / Windsurf MCP settings

That's it. Your notes are searchable.


Installation

The quick start above uses uvx (recommended). Other options:

pip
pip install mcp-recall-md
{
  "mcpServers": {
    "mcp-recall-md": {
      "command": "mcp-recall-md",
      "args": ["--vaults", "C:/Users/you/notes"]
    }
  }
}
Standalone .exe (no Python needed)
  1. Download mcp-recall-md.exe from the latest release
  2. Put it somewhere permanent (e.g. C:\Tools\mcp-recall-md\)
{
  "mcpServers": {
    "mcp-recall-md": {
      "command": "C:/Tools/mcp-recall-md/mcp-recall-md.exe",
      "args": ["--vaults", "C:/Users/you/notes"]
    }
  }
}

Configuration

Multiple vaults

List all folders — each is indexed independently:

"args": ["--vaults", "C:/notes/work", "C:/notes/personal", "C:/docs"]

.recallignore

Drop a .recallignore in any vault root to exclude files. Standard .gitignore syntax:

.obsidian/
_templates/
drafts/

CLI flags

Flag Default Description
--vaults (none) Folders to index and watch
--db-path ~/.mcp-recall-md/db ChromaDB storage location
--verbose off Debug logging to stderr

Tools

Your AI assistant gets these tools automatically via MCP:

Tool Description
search Find notes by meaning — returns ranked results with similarity scores and file paths
status Show indexed article count and watched vaults
index Manually store an article (for use without --vaults)
remove Delete an article from the index

Most users only interact with search — everything else is automatic.


Troubleshooting

Problem Fix
Search returns nothing Check that --vaults points to folders with .md files
First run is slow Embedding model (~80 MB) downloads once on first use
Need to debug Add --verbose, check ~/.mcp-recall-md/server.log
Force re-index Delete ~/.mcp-recall-md/db and restart

Logs: ~/.mcp-recall-md/server.log (5 MB max, 3 rotated backups)


Limitations

  • Single-chunk embedding — large files (10k+ words) may search less precisely than shorter notes
  • English-optimized — other languages work but with lower accuracy

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_recall_md-0.4.0.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_recall_md-0.4.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file mcp_recall_md-0.4.0.tar.gz.

File metadata

  • Download URL: mcp_recall_md-0.4.0.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_recall_md-0.4.0.tar.gz
Algorithm Hash digest
SHA256 62503be279f9443d1f291b29abf067ea7df6fd212c49e3fdaa0fe7f729a4a1fd
MD5 2df34172dd7b191386c0af1dbaaa25eb
BLAKE2b-256 b0d4eb4177812cbfd7bdfb7d146a6d38118cd6d6d9e0eb074f97e4d1ba4769bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_recall_md-0.4.0.tar.gz:

Publisher: release.yml on kalikin-artem/mcp-recall-md

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_recall_md-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_recall_md-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_recall_md-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2a4ab85675fbedacd2b45fc2bc006453c7530c219c132bfaca4c83f05516853a
MD5 6d6ae9eb77b3f19cee95c5726a243935
BLAKE2b-256 a1c9350947a80c415344ee146e2db378a01d3469f6b606b03fca47a4bdaa6da7

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_recall_md-0.4.0-py3-none-any.whl:

Publisher: release.yml on kalikin-artem/mcp-recall-md

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page