Sandbox
@bartolli/codanna

Local code search MCP server for coding agents

Codanna gives your agent semantic code search, symbol lookup, call graphs, dependency tracking, and document RAG from a local repository index. It works as either a persistent MCP server or a one-shot CLI, so builders can use it in long sessions, shell commands, hooks, or scripts.

740 stars69 forksRustUpdated 18d ago
Who it's for

Builders who want Claude Code, Cursor, Codex, Gemini, or another MCP client to reason over a local codebase with structured context.

What it delivers

You can ask your agent where code lives, what it calls, and what would break if you change it.

What it does

Semantic code search

Find functions and code by intent, not just by names or keywords.

Call graph and impact analysis

Trace callers, callees, implementations, and the blast radius of a change.

Document RAG

Index markdown and text files so the agent can search project docs alongside code.

MCP server and CLI

Run it as a persistent server with `codanna serve` or as direct commands with `codanna mcp ...`.

Local-first indexing

Keeps the repository index on disk in `.codanna/` and does not send source code out by default.

Claude plugin package

Includes a `.claude-plugin/` bundle and plugin install flow for Claude Code.

How to get it

  1. 1Run
    curl -fsSL --proto '=https' --tlsv1.2 https://install.codanna.sh | sh
  2. 2Run
    brew install codanna
  3. 3Run
    nix run github:bartolli/codanna
  4. 4Run
    irm https://raw.githubusercontent.com/bartolli/codanna/main/scripts/install.ps1 | iex
  5. 5Run
    codanna init
    codanna index src
  6. 6Run
    codanna mcp semantic_search_with_context query:"where do we handle errors" limit:3

README

Codanna

Claude Google Gemini OpenAI Codex Rust Crates.io Total Downloads

Documentation · Report Bug · Discussions

Local code intelligence MCP server and CLI for AI coding agents.

X-ray vision for your agent.

The codanna index as an interactive disc: module wedges, call webs, symbol search, commit timeline

Codanna is a local code intelligence and semantic code search MCP server for AI coding agents. One MCP call returns symbol context, call graph, and impact analysis, pre-correlated — the grep-and-read loop your agent runs today, collapsed into a single response it can act on.

It indexes your repository on disk and serves symbol search, semantic search, call graphs, dependency tracking, document RAG, and impact analysis to Claude Code, Cursor, Windsurf, Codex, Gemini, and any MCP-compatible client — as a persistent MCP server for session-long work, or a one-shot CLI for instant answers when LSP is too slow. Written in Rust. 15 languages. No source code leaves your machine.

Two operational modes

Codanna's MCP toolset is reachable two ways. Same tools, same surface — pick the mode that fits the workflow.

Persistent MCP server — for session-long agent workflows.

codanna serve                # stdio
codanna serve --http         # HTTP
codanna serve --https        # HTTPS

One-shot CLI — for slash-commands, bash hooks, scripts, CI. No daemon required.

codanna mcp find_symbol name:"my_function"
codanna mcp analyze_impact symbol_name:"my_function"
codanna mcp semantic_search_with_context query:"recursively extract function calls"

codanna mcp semantic_search_with_context is the headline command: it returns N semantic matches, and for each match the symbol identity, signature, docstring, callees, callers, and recursive impact analysis — five MCP tools fused into one query.

The one-shot CLI is also what makes codanna skill-friendly: an Agent Skill can wrap codanna mcp commands directly in Claude Code, Cursor, Windsurf, Codex, Gemini, or any harness that runs shell commands — no MCP plumbing required.

What one call returns

The headline command, run against codanna's own source tree. One call, and the agent has the symbol, its documentation, signature, callees with exact call sites, callers, and blast radius:

$ codanna mcp semantic_search_with_context query:"recursively extract function calls" limit:1

Found 1 results for query: 'recursively extract function calls'

1. extract_calls_recursive - Method at src/parsing/cpp/parser.rs:1002-1047 [symbol_id:1477]
   Similarity Score: 0.833
   Documentation:
     Recursively extract function calls with context tracking
   Signature: fn extract_calls_recursive<'a>(
        node: Node,
        code: &'a str,
        current_function: Option<&'a str>,
        calls: &mut Vec<(&'a str, &'a str, Range)>,
    )

   extract_calls_recursive calls 3 function(s):
     -> Method extract_calls_recursive at src/parsing/cpp/parser.rs:1002 [symbol_id:1477] (called at src/parsing/cpp/parser.rs:1045)
     -> Method function_name_at_def at src/parsing/cpp/parser.rs:377 [symbol_id:1451] (called at src/parsing/cpp/parser.rs:1008)
     -> Method new at src/types/mod.rs:112 [symbol_id:7388] (called at src/parsing/cpp/parser.rs:1028)

   2 function(s) call extract_calls_recursive:
     <- Method extract_calls_recursive at src/parsing/cpp/parser.rs:1045 [symbol_id:1477]
     <- Method find_calls at src/parsing/cpp/parser.rs:885 [symbol_id:1467]

   Changing extract_calls_recursive would impact 1 symbol(s) (max depth: 2):

     methods (1):
       - find_calls [symbol_id:1467]

Guidance: Found one match with full context. Review the relationships to understand how this fits into the codebase.

Every result carries file:line coordinates the agent can open directly, symbol_ids it can reuse to disambiguate name collisions, and a guidance hint it can chain on. Add --json for the structured envelope.

Local-first

Codanna runs on your machine. The repository index lives on disk under .codanna/. The embedding model downloads once on first use, then runs locally. No source code, symbols, or queries are sent to a remote API by default. Remote OpenAI-compatible embeddings are opt-in: remote_url under [semantic_search] in settings.toml, or CODANNA_EMBED_* environment variables; the API key is environment-only.

Quick Start

Install (macOS, Linux, WSL)

curl -fsSL --proto '=https' --tlsv1.2 https://install.codanna.sh | sh

Or via Homebrew

brew install codanna

Or via Nix

nix run github:bartolli/codanna

Windows (PowerShell)

irm https://raw.githubusercontent.com/bartolli/codanna/main/scripts/install.ps1 | iex

See Installation Guide for Cargo and other options.

Initialize and index

codanna init
codanna index src

Search code

codanna mcp semantic_search_with_context query:"where do we handle errors" limit:3

Search documentation (RAG)

codanna documents add-collection docs ./docs
codanna documents index
codanna mcp search_documents query:"authentication flow"

What It Does

Your AI assistant gains structured knowledge of your code:

  • "Where's this function called?" - Instant call graph, not grep results
  • "Find authentication logic" - Semantic search matches intent, not just keywords
  • "What breaks if I change this?" - Full dependency analysis across files

The difference: Codanna understands code structure. It knows parseConfig is a function that calls validateSchema, not just a string match.

Features

FeatureDescription
Semantic SearchNatural language queries against code and documentation. Finds functions by what they do, not just their names.
Relationship TrackingCall graphs, implementations, and dependencies. Trace how code connects across files.
Document SearchIndex markdown and text files for RAG workflows. Query project docs alongside code.
MCP ProtocolNative integration with Claude, Gemini, Codex, and other AI assistants.
ProfilesPackage hooks, commands, and agents for different project types.

Performance: parser throughput 76,000-249,000 symbols/second depending on language; warm-server lookups under 10 ms (0.3 ms exact, ~3 ms semantic). Parsing is the fast layer; embedding generation during indexing takes longer and scales with your cores. Measured numbers, machine spec, and reproduction commands: Benchmarks.

Languages: Rust, Python, JavaScript, TypeScript, Java, Kotlin, Go, PHP, C, C++, C#, Clojure, Lua, Swift, GDScript.

Claude Code plugin

Two skills over the index, driven by the agent: it picks the view that fits the question. x-ray covers scoped questions — a symbol's blast radius as a call DAG, module structure as a collapsible tree or radial poster, cross-module calls as an edge-bundle page. graph covers codebase shape: the module disc with hubs at the centre, a commit timeline, and a heatmap. Symbol search, detail panels with highlighted signatures, call-graph navigation. The disc renderer is adapted from vault-graph by Lukas Proprentner (MIT).

/plugin marketplace add bartolli/codanna
/plugin install codanna-toolset@codanna

The x-ray collapsible tree: module structure with symbol detail panels and call-graph navigation

Integration

Add codanna to any MCP-compatible client. Project-scoped .mcp.json (Claude Code, Cursor, Windsurf):

{
  "mcpServers": {
    "codanna": {
      "command": "codanna",
      "args": ["--config", ".codanna/settings.toml", "serve", "--watch"]
    }
  }
}

--watch keeps the index hot as files change. Transports: stdio, HTTP, HTTPS. See Integration Guides for Claude Desktop, Gemini, Codex, and network setups.

Requirements

  • ~150MB for embedding model (downloaded on first use)
  • Build from source: Rust 1.85+, Linux needs pkg-config libssl-dev
  • Windows support is experimental

Contributing

Contributions welcome. See CONTRIBUTING.md.

License

Apache License 2.0 - See LICENSE.

Attribution required. See NOTICE.


Built with Rust.

Files in the repo

Repository payload29 top-level entries
  • .claude-plugin
  • .github
  • agents
  • assets
  • benches
  • contributing
  • examples
  • scripts
  • src
  • tests
  • .codannaignore
  • .gitignore
  • .markdownlint.json
  • .mcp_stdio.json
  • build.rs
  • Cargo.lock
  • Cargo.toml
  • CHANGELOG.md
  • CLAUDE.md.example
  • clippy.toml
  • codanna-navigator.png
  • context7.json
  • CONTRIBUTING.md
  • flake.lock
  • flake.nix
  • LICENSE
  • markdownlint.toml
  • NOTICE
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface

86k

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
tirth8205/
code-review-graph

Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.

31k
2akouwu/
reverify

Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k