Back to MCP Servers

Cicada

Code Intelligence for Elixir: module search, function tracking, and PR attribution through tree-sitter AST parsing

coding-agents
By wende
3911Updated 4 months agoPythonMIT

Installation

npx -y cicada

Configuration

{
  "mcpServers": {
    "cicada": {
      "command": "npx",
      "args": ["-y", "cicada"]
    }
  }
}

How to use

  1. Run the installation command above (if needed)
  2. Open your Claude Code settings file (~/.claude/settings.json)
  3. Add the configuration to the mcpServers section
  4. Restart Claude Code to apply changes
<div align="center"> <img src="https://github.com/user-attachments/assets/699c0a3f-dfae-4e14-81db-c8ba970d9a35">

CICADA

mcp-name: io.github.wende/cicada

Code Intelligence: Contextual Analysis, Discovery, and Attribution

Context compaction for AI code assistants – Give your AI structured, token-efficient access to 17+ languages including Elixir, Python, TypeScript, JavaScript, Rust, and more.

Up to 50% less waiting · Up to 70% less tokens · Up to 99% less explanations to do Tighter context = Better Quality

Python Version License: MIT codecov MCP Compatible

Elixir Support Python Support TypeScript Support JavaScript Support Rust Support +12 More

Install MCP Server

Quick Install · Security · Developers · AI Assistants · Docs

</div>

Why CICADA?

The core problem: AI code assistants waste context on blind searches. Grep dumps entire files when you only need a function signature, leaving less room for actual reasoning.

The Context Compaction Approach

Instead of raw text dumps, CICADA gives your AI structured, pre-indexed knowledge:

Traditional SearchCICADA
Grep dumps entire filesReturns only signatures + call sites
Misses aliased importsTracks all reference types
No semantic understandingKeyword search finds verify_credentials when you ask for "authentication"

What You Get

  • AST-level indexing – Module/function/class definitions with signatures, specs, docs
  • 17+ language support – Elixir, Python, TypeScript, JavaScript, Rust, Go, Java, Kotlin, Scala, C/C++, Ruby, C#, Visual Basic, Dart, PHP, Erlang (beta)
  • Complete call-site tracking – Aliases, imports, dynamic references across all supported languages
  • Semantic search – Find code by concept with keyword extraction or embeddings (Ollama integration)
  • Git + PR attribution – Surface why code exists, not just what
  • Dependency analysis – Bidirectional tracking (what calls this, what does this call)
  • Automatic language detection – Works seamlessly across polyglot codebases

Install

# 1. Install uv (if needed)
# curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install cicada-mcp

# In your repo
cicada claude   # or: cicada cursor, cicada vs, cicada gemini, cicada codex, cicada opencode, cicada zed
<div align="left"> <summary><strong>Try before installing permanently</strong></summary> Runs CICADA on demand (worse indexing quality, but zero install).
uvx cicada-mcp claude   # or cursor, vs

or

claude mcp add cicada uvx cicada-mcp
gemini mcp add cicada uvx cicada-mcp
codex mcp add cicada uvx cicada-mcp
kimi mcp add --transport stdio cicada -- cicada-mcp

Uses your editor's built-in MCP management to install CICADA.

</details> </div>

Available commands after installation:

  • cicada [claude|cursor|vs|gemini|codex|opencode|zed] - One-command interactive setup per project
  • cicada-mcp - MCP server (auto-started by editor)
  • cicada serve - Start REST API server for HTTP access to all MCP tools
  • cicada status - Show index status, PR index, link status, agent files, MCP configs
  • cicada stats [repo] - Display usage statistics (tool calls, tokens, execution times)
  • cicada watch - Watch for file changes and automatically reindex
  • cicada index - Re-index code with custom options (-f/--force, --keywords, --embeddings, --watch)
  • cicada index-pr - Index pull requests for PR attribution
  • cicada run [tool] - Execute any of the 7 MCP tools directly from CLI
  • cicada agents install - Install Claude Code agents to ./.claude/ directory
  • cicada link [parent_dir] - Links current repository to an existing index
  • cicada clean - Completely removes cicada integration from your folder as well as all settings

Ask your assistant:

# Elixir
"Show me the functions in MyApp.User"
"Where is authenticate/2 called?"

# Python
"Show me the AuthService class methods"
"Where is login() used in the codebase?"

# Both languages
"Find code related to API authentication"

Privacy & Security

  • 100% local: parsing + indexing happen on your machine; no external access.
  • No telemetry: CICADA doesn't collect usage or any telemetry.
  • Read-only tools: MCP endpoints only read the index; they can't change your repo.
  • Optional GitHub access: PR features rely on gh and your existing OAuth token.
  • Data layout:
    ~/.cicada/projects/<repo_hash>/
    ├─ index.json      # modules, functions, call sites, metadata
    ├─ config.yaml     # indexing options + mode
    ├─ hashes.json     # incremental indexing cache
    └─ pr_index.json   # optional PR metadata + reviews
    Your repo only gains an editor config (.mcp.json, .cursor/mcp.json, .vscode/settings.json, .gemini/settings.json, .codex/mcp.json, or .opencode.json).

For Developers

Wire CICADA into your editor once, and every assistant session inherits the context.

Install & Configure

cd /path/to/project
cicada claude   # or cicada cursor / cicada vs / cicada gemini / cicada codex / cicada opencode / cicada zed

Enable PR Attribution (optional)

brew install gh    # or apt install gh
gh auth login
cicada index-pr .     # incremental
cicada index-pr . --clean   # full rebuild

Unlocks questions like "Which PR introduced line 42?" or "What did reviewers say about billing.ex?"

Automatic Re-indexing with Watch Mode

Enable automatic reindexing when files change by starting the MCP server with the --watch flag:

** .mcp.json**

{
  "mcpServers": {
    "cicada": {
      "command": "cicada-mcp",
      "args": ["--watch"],
      "env": {
        "CICADA_CONFIG_DIR": "/home/user/.cicada/projects/<hash>"
      }
    }
  }
}

When watch mode is enabled:

  • A separate process monitors .ex, .exs (Elixir) and .py (Python) files for changes
  • Changes are automatically reindexed (incremental, fast)
  • 2-second debounce prevents excessive reindexing during rapid edits
  • The watch process stops automatically when the MCP server stops
  • Excluded directories: deps, _build, node_modules, .git, assets, priv, .venv, venv

CLI Cheat Sheet

Note: Language detection is automatic – CICADA detects Elixir (mix.exs) and Python (pyproject.toml) projects automatically.

CommandPurposeRun When
cicada claudeConfigure MCP + incremental re-indexFirst setup, after local changes
cicada statusCheck index health, link status, agent filesAfter setup, troubleshooting
cicada statsView usage statistics and token metricsMonthly reviews, optimization
cicada watchMonitor files and auto-reindex on changesDuring active development
cicada index --keywords .Rebuild with keyword indexingAfter large refactors or enabling keywords mode
cicada index --embeddings .Rebuild with embeddings (semantic search)When you want Ollama-powered semantic analysis
cicada index-pr .Sync PR metadata/reviewsAfter new PRs merge

Troubleshooting

<details> <summary><b>"Index file not found"</b></summary>

Run the indexer first:

cicada index /path/to/project

Ensure indexing completed successfully. Check for ~/.cicada/projects/<hash>/index.json.

</details> <details> <summary><b>"Module not found"</b></summary>

Use the exact module name as it appears in code (e.g., MyApp.User, not User).

If module was recently added, re-index:

cicada index .
</details> <details> <summary><b>MCP Server Won't Connect</b></summary>

Troubleshooting checklist:

  1. Verify configuration file exists:

    # For Claude Code
    ls -la .mcp.json
    
    # For Cursor
    ls -la .cursor/mcp.json
    
    # For VS Code
    ls -la .vscode/settings.json
  2. Check paths are absolute:

    cat .mcp.json
    # Should contain: /absolute/path/to/project
    # Not: ./project or ../project
  3. Ensure index exists:

    ls -la ~/.cicada/projects/
    # Should show directory for your project
  4. Restart editor completely (not just reload window)

  5. Check editor MCP logs:

    • Claude Code: --debug
    • Cursor: Settings → MCP → View Logs
    • VS Code: Output panel → MCP
</details> <details> <summary><b>PR Features Not Working</b></summary>

Setup GitHub CLI:

# Install GitHub CLI
brew install gh  # macOS
sudo apt install gh  # Ubuntu
# or visit https://cli.github.com/

# Authenticate
gh auth login

# Index PRs
cicada index-pr

Common issues:

  • "No PR index found" → Run cicada index-pr .
  • "Not a GitHub repository" → Ensure repo has GitHub remote
  • Slow indexing → First-time indexing fetches all PRs; subsequent runs are incremental
  • Rate limiting → GitHub API has rate limits; wait and retry if you hit limits

Force rebuild:

cicada index-pr --clean
</details> <details> <summary><b>Keyword Search Not Working</b></summary>

Error: "Keyword search not available"

Cause: Index was built without keyword extraction.

Solution:

# Re-index with keyword extraction
cicada index .  # or --keywords

Verify:

cat ~/.cicada/projects/<hash>/config.yaml
# Should show:
# indexing:
#   mode: keywords
</details>

More detail: PR Indexing, Incremental Indexing.

<details> <summary><b>Python Indexing</b></summary>

Requirements:

  • Node.js (for scip-python indexer)
  • Python project with pyproject.toml

First-time setup: CICADA automatically installs scip-python via npm on first index. This may take a minute.

Known limitations (Beta):

  • First indexing may be slower than Elixir (SCIP generation step)
  • Large virtual environments (.venv) are automatically excluded
  • Some dynamic Python patterns may not be captured

Performance tips:

# Ensure .venv is excluded
echo "/.venv/" >> .gitignore

# Use keywords mode for quickest indexing
cicada index --keywords .

Report issues: GitHub Issues with "Python" label

</details>

For AI Assistants

CICADA ships 7 focused MCP tools designed for efficient code exploration across Elixir, Python, and Erlang codebases.

🧭 Which Tool Should You Use?

NeedToolNotes
Start exploringquery🚀 START HERE - Smart discovery with keywords/patterns + filters (scope, recent, path)
View a module's complete APIsearch_moduleFunctions, signatures, specs, do

View source on GitHub