Lien
OfficialProvides semantic search and code understanding for Astro projects, including framework-aware indexing and complexity analysis.
Provides semantic search and code understanding for C++ codebases.
Provides semantic search and code understanding for Django projects, including framework-aware indexing.
Provides semantic search and code understanding for JavaScript codebases.
Provides semantic search and code understanding for Kotlin codebases.
Provides semantic search and code understanding for Laravel projects, including framework-aware indexing.
Provides semantic search and code understanding for Markdown documentation.
Provides semantic search and code understanding for .NET projects, including framework-aware indexing.
Provides semantic search and code understanding for Node.js projects, including framework-aware indexing.
Provides semantic search and code understanding for PHP codebases and frameworks like Laravel.
Provides semantic search and code understanding for Python codebases and frameworks like Django.
Provides semantic search and code understanding for Ruby codebases and frameworks like Rails.
Provides semantic search and code understanding for Rust codebases.
Provides semantic search and code understanding for Scala codebases.
Provides semantic search and code understanding for Swift codebases.
Provides semantic search and code understanding for TypeScript codebases, including framework-aware indexing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lienhow does the authentication flow work?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Lien
/ljɛ̃/, French for "link"
A local code-health CLI: what's risky to change, and what your change just made worse. 100% local, 100% private.
Lien parses your working tree with Tree-sitter and answers four questions about a change — what is risky to touch, what crossed a complexity threshold, what deterministic signals fire on the diff, and where the hotspots are. There is no server, no database, and nothing to index: every command reads the files on disk when you run it. Point it at a repo and it works.
Full Documentation | Getting Started | How It Works
Features
Risk ranking -
lien healthranks functions by complexity × fan-in ÷ test coveragePre-commit gate -
lien deltafails only on NEW complexity threshold crossings, never pre-existing onesDeterministic diff signals -
lien reviewflags stale duplicated literals, removed exports, doc drift and moreComplexity analysis - Human-friendly metrics: test paths, mental load, time to understand
Nothing to set up - No index, no server, no config, no daemon. Install and run
100% Local & Private - All analysis happens on your machine; no network calls
Fast - Whole-repo parse in seconds;
lien deltain ~50 msFree Forever - No API costs, no subscriptions, no network calls at all
Ecosystem-Aware & Monorepo - Auto-detects 12 ecosystem presets; supports 15+ languages
Related MCP server: Context Bridge
Quick Start
# 1. Install
npm install -g @liendev/lien
# 2. Run it in any repo
lien healthThat's the whole setup. No editor configuration, no indexing step, no wizard.
lien health # what's risky to change here?
lien delta # did my working tree cross a complexity threshold?
lien review --base main # deterministic signals over my diff
lien complexity # where are the hotspots?The four commands
Command | Answers |
| Which functions are risky to change? (complexity × fan-in ÷ test coverage) |
| Did this change push a function over a threshold it was under before? |
| What deterministic signals fire on this diff? |
| Where is the tech debt? |
lien delta is the one built to sit in a pre-commit hook or CI: it exits non-zero
only for a function that crossed a threshold it was under at the base commit.
Touching or improving a pre-existing violation never fails it.
Previous versions shipped an MCP server, a persisted SQLite index and FTS5 lexical search. All three have been removed, along with
lien serve,lien index, and thesearch_code/get_files_context/get_dependents/list_functions/find_similar/get_complexitytools. An editor configured againstlien servewill fail to start it. The structural questions Lien still answers, it answers by parsing on demand.
Complexity Metrics
Lien tracks code complexity with human-friendly outputs:
Test paths - Cyclomatic complexity as "needs ~X tests for full coverage"
Mental load - Cognitive complexity with nesting penalty
Time to understand - Halstead effort as readable duration (~2h 30m)
Estimated bugs - Halstead prediction (Effort^(2/3) / 3000)
Documentation
Installation - npm, npx, or local setup
Getting Started - Your first run
Configuration - Complexity thresholds
CLI Commands - Full command reference
How It Works - Architecture overview
Supported Languages
TypeScript • JavaScript • Vue • Python • PHP • Liquid • Go • Rust • Java • C/C++ • Ruby • Swift • Kotlin • C# • Scala • Markdown • YAML
Ecosystem Presets: 12 ecosystem presets including Node.js, Python, PHP, Laravel, Ruby, Rails, Rust, JVM, Swift, .NET, Django, and Astro (auto-detected)
Contributing
Contributions welcome! See CONTRIBUTING.md for guidelines.
Support
Issues - Report bugs or request features
Discussions - Ask questions and share ideas
License
AGPL-3.0 © Alf Henderson
Lien is free forever for local use. The AGPL-3.0 license requires that anyone who distributes a modified version release its source under the same terms. For licensing questions, contact alf@lien.dev.
This server cannot be deployed
Maintenance
Related MCP Connectors
Give your AI agent persistent, governed memory for every project. At task start it recalls the approved decisions, conventions, risks and architecture (semantic search, ranked by importance); at close it proposes what was learned as typed memories that you review and approve — governance, not a notes dump. Agents propose, humans govern: edits go back to pending and deletion is human-only by design. Connect Claude Code, Cursor, Claude Desktop or any MCP client in two minutes with just your API key — hosted (nothing to install) or locally via `uvx solucortex-mcp`. Built by SoluAI and dogfooded daily: SoluCortex is developed using its own living memory.
Connect Claude, Cursor, or ChatGPT to your business data. Ask questions, get answers.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP Server for persistent code indexing. Gives AI assistants (Claude, Gemini, Copilot, Cursor) instant access to your codebase. 50x less context than grep.2254 npm43MIT
- AlicenseNot gradedqualityBmaintenanceA unified context layer that connects your local data — repositories, documents, remote machines, and notes — to LLM interfaces through the Model Context Protocol (MCP).3MIT
- AlicenseAqualityCmaintenanceA semantic code context server that connects your local repository to AI assistants via the Model Context Protocol, enabling dynamic codebase exploration without copy-pasting.524 npm3MIT
- AlicenseAqualityAmaintenanceSemantic codebase search + persistent working memory for AI code editors. Local, zero-config, MCP. No API key.8232MIT