consilience
Finds missing links between notes in an Obsidian vault by analyzing embeddings locally. Exposes tools to suggest missing links across the vault or for a specific note.
README
Consilience
Find the links your notes are missing.
Obsidian's CLI finds the links that are broken. Consilience finds the ones that are missing — pairs of notes that are clearly about the same thing but were never linked, because you wrote them three weeks apart and never noticed.
It runs entirely on your machine. No cloud, no API key, no account. Embeddings come from a local Ollama model, and the index is a single SQLite file that lives next to your notes.
Why I built this
I keep a large vault, and every few months I stumble on two notes that obviously belong together and think "how did I never link these?" Search doesn't help with that — search finds notes when you already know what you're looking for. The connections I was missing were exactly the ones I wasn't searching for.
So the tool does one thing. It reads the vault, embeds each note locally, and tells me which pairs are close in meaning but have no link between them. Nothing else. It doesn't edit my notes, it doesn't phone home, and it stays out of the way until I ask it a question.
Install
From source (Python 3.10+):
git clone https://github.com/Abner-Machado/consilience
cd consilience
pipx install . # or: pip install .
You also need Ollama with an embedding model:
ollama pull nomic-embed-text
Use it
Index the vault (this is the step that needs Ollama), then ask for suggestions (this step runs offline):
consilience index ~/notes
consilience suggest ~/notes
Example:
7 missing link(s):
0.891 Spaced repetition <-> Why I forget things
learning/spaced-repetition.md | journal/2025-forgetting.md
0.864 Stoicism <-> Dealing with setbacks
philosophy/stoicism.md | journal/setbacks.md
Useful flags:
consilience suggest ~/notes --threshold 0.82 # stricter matches only
consilience suggest ~/notes --note "Stoicism" # just this note's missing links
consilience suggest ~/notes --json # for scripts
Re-running index only re-embeds notes that changed, so it stays fast.
Use it from an MCP client
Consilience speaks the Model Context Protocol, so an assistant can ask for suggestions directly. Point your client at it:
{
"mcpServers": {
"consilience": {
"command": "consilience",
"args": ["serve"]
}
}
}
Two tools are exposed: suggest_links (missing links across the whole vault) and
related_notes (missing links for one note). Both re-index incrementally before
answering.
How it works
- Every
.mdfile is read; its title, body, and outgoing[[wikilinks]]are parsed. Notes are keyed by file stem, the way Obsidian resolves links. - Each note is embedded by the local model and stored in SQLite as raw float32 bytes. No vector database.
- On
suggest, note embeddings are compared with cosine similarity. A pair is returned when it clears the threshold and neither note already links to the other, in either direction.
The full design is in SPEC.md.
Where it fits
- Obsidian's official CLI and plugins like Vault Inspector handle broken links and orphans. Consilience does not — it is the complementary half.
- Smart Connections shows related notes while you read one note. Consilience audits the whole vault at once and works from the command line or an MCP client, with no plugin and no Obsidian instance running.
Limits
Stated plainly, because they matter:
- Comparison is O(n²). It's comfortable up to a few thousand notes; a very large vault will be slow.
- Long notes are truncated before embedding, so a very long note is judged on its opening.
- Two notes that share a file name collide on their key; the last one wins.
License
MIT. See LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.