loading…
Search for a command to run...
loading…
Code Intelligence for Elixir: module search, function tracking, and PR attribution through tree-sitter AST parsing
Code Intelligence for Elixir: module search, function tracking, and PR attribution through tree-sitter AST parsing
mcp-name: io.github.wende/cicada
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
Quick Install · Security · Developers · AI Assistants · Docs
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.
Instead of raw text dumps, CICADA gives your AI structured, pre-indexed knowledge:
| Traditional Search | CICADA |
|---|---|
| Grep dumps entire files | Returns only signatures + call sites |
| Misses aliased imports | Tracks all reference types |
| No semantic understanding | Keyword search finds verify_credentials when you ask for "authentication" |
# 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
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.
Available commands after installation:
cicada [claude|cursor|vs|gemini|codex|opencode|zed] - One-command interactive setup per projectcicada-mcp - MCP server (auto-started by editor)cicada serve - Start REST API server for HTTP access to all MCP toolscicada status - Show index status, PR index, link status, agent files, MCP configscicada stats [repo] - Display usage statistics (tool calls, tokens, execution times)cicada watch - Watch for file changes and automatically reindexcicada index - Re-index code with custom options (-f/--force, --keywords, --embeddings, --watch)cicada index-pr - Index pull requests for PR attributioncicada run [tool] - Execute any of the 7 MCP tools directly from CLIcicada agents install - Install Claude Code agents to ./.claude/ directorycicada link [parent_dir] - Links current repository to an existing indexcicada clean - Completely removes cicada integration from your folder as well as all settingsAsk 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"
gh and your existing OAuth token.~/.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).Wire CICADA into your editor once, and every assistant session inherits the context.
cd /path/to/project
cicada claude # or cicada cursor / cicada vs / cicada gemini / cicada codex / cicada opencode / cicada zed
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?"
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:
.ex, .exs (Elixir) and .py (Python) files for changesdeps, _build, node_modules, .git, assets, priv, .venv, venvNote: Language detection is automatic – CICADA detects Elixir (mix.exs) and Python (pyproject.toml) projects automatically.
| Command | Purpose | Run When |
|---|---|---|
cicada claude |
Configure MCP + incremental re-index | First setup, after local changes |
cicada status |
Check index health, link status, agent files | After setup, troubleshooting |
cicada stats |
View usage statistics and token metrics | Monthly reviews, optimization |
cicada watch |
Monitor files and auto-reindex on changes | During active development |
cicada index --keywords . |
Rebuild with keyword indexing | After 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/reviews | After new PRs merge |
Run the indexer first:
cicada index /path/to/project
Ensure indexing completed successfully. Check for ~/.cicada/projects/<hash>/index.json.
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 .
Troubleshooting checklist:
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
Check paths are absolute:
cat .mcp.json
# Should contain: /absolute/path/to/project
# Not: ./project or ../project
Ensure index exists:
ls -la ~/.cicada/projects/
# Should show directory for your project
Restart editor completely (not just reload window)
Check editor MCP logs:
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:
cicada index-pr .Force rebuild:
cicada index-pr --clean
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
More detail: PR Indexing, Incremental Indexing.
Requirements:
First-time setup: CICADA automatically installs scip-python via npm on first index. This may take a minute.
Known limitations (Beta):
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
CICADA ships 7 focused MCP tools designed for efficient code exploration across Elixir, Python, and Erlang codebases.
| Need | Tool | Notes |
|---|---|---|
| Start exploring | query |
🚀 START HERE - Smart discovery with keywords/patterns + filters (scope, recent, path) |
| View a module's complete API | search_module |
Functions, signatures, specs, docs. Use what_calls_it/what_it_calls for bidirectional analysis |
| Find where a function is used | search_function |
Definition + all call sites. Supports wildcards (*) and OR (|) patterns |
| Track git history | git_history |
Unified tool: blame, commits, PRs, function evolution (replaces 4 legacy tools) |
| Drill down into results | expand_result |
Auto-expands modules or functions from query results |
| Advanced index queries | query_jq |
Custom jq queries for power users |
Want to see these tools in action? Check out Complete Workflow Examples with pro tips and real-world scenarios.
query - Smart code discovery (your starting point)
scope (public/private), recent (last 14 days), filter_type (modules/functions), match_source (docs/strings)path_pattern to filter by locationsearch_module - Deep module analysis
what_calls_it=true → See who uses this module (impact analysis)what_it_calls=true → See what this module depends onMyApp.*, Python: api.handlers.*) and OR patterns (MyApp.User|MyApp.Post)search_function - Function usage tracking
what_calls_it=true (default) → See all callerswhat_it_calls=true → See all dependenciesinclude_usage_examples=trueusage_type: source, tests, or allgit_history - All git operations in one tool
git_history("file.ex", start_line=42) → blame + PRgit_history("file.ex", start_line=40, end_line=60) → grouped blamegit_history("file.ex", function_name="create_user") → evolutiongit_history("file.ex") → all PRs/commitsrecent=true (14d), recent=false (>14d), recent=null (all)author="john"expand_result - Drill down from query results
query_jq - Advanced index queries
| schemaDetailed parameters + output formats: MCP_TOOLS_REFERENCE.md.
All tools return structured Markdown/JSON snippets (signatures, call sites, PR metadata) instead of full files, keeping prompts lean.
New in v0.5.1: All tools now use compact output by default to minimize token usage. Use verbose=true for detailed output with full docs and specs.
Deep Dives:
Production Ready:
Beta:
| Feature | CICADA | Serena | Codicil (Elixir-only) |
|---|---|---|---|
| Analysis Method | SCIP (static index) | LSP (real-time server) | LLM summaries + embeddings |
| Code Editing | ❌ | ✅ | ❌ |
| Git Context | ✅ PR history, blame, evolution | ❌ | ❌ |
| Resource Usage | Low (read from disk) | High (persistent server processes) | Medium (API calls) |
| Privacy | 100% local | 100% local | Requires external LLM APIs |
| Semantic Search | Local Ollama or keywords | ❌ | OpenAI/Anthropic embeddings |
| Call Graph | Bidirectional with alias resolution | LSP-based | ❌ |
When to choose CICADA: You want local-first operation with rich git context (PR attribution, blame, function evolution tracking) and efficient token usage.
When to choose Serena: You need code editing capabilities through LSP and can accept higher resource usage.
When to choose Codicil: You have an Elixir project and prefer LLM-powered semantic summaries (Elixir-only).
git clone https://github.com/wende/cicada.git
cd cicada
uv sync
pytest
Before submitting a PR:
black cicada testspytest --cov=cicada --cov-report=term-missing)We welcome issues/PRs for:
MIT – see LICENSE.
Stop wasting context on blind searches. Give your AI CICADA.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"wende-cicada": {
"command": "npx",
"args": []
}
}
}