PluginBench
MCP Server
Active
Apache-2.0

Octocode MCP Server

io.github.Muvon/octocode

AI-powered code indexer with semantic search, knowledge graphs, and LSP integration for your codebase

What is the Octocode MCP server?

Octocode is an MCP server that transforms your codebase into a navigable knowledge graph using tree-sitter AST parsing. It gives AI assistants like Claude and Cursor semantic search, dependency navigation, and structural understanding of your code without requiring external embeddings or indexing.

Octocode enables AI agents to understand your codebase structure through semantic search, live symbol graphs, and LSP-powered code navigation. Instead of treating code as flat text, it builds a dependency graph of files, imports, function calls, and implementations—letting your AI assistant answer architectural questions, find cross-file dependencies, and navigate your project like a developer would.

How to install Octocode

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "octocode": {
      "command": "npx",
      "args": [
        "-y",
        "@muvon/octocode",
        "mcp"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • semantic_search — Find code by meaning using natural language queries—e.g., 'authentication middleware', 'error handling', 'database queries'
  • view_signatures — View file structure including function signatures, class definitions, and imports without reading entire files
  • graphrag — Query the live file and symbol graph to search nodes, inspect relationships (imports, calls, extends, implements), and find dependency paths
  • structural_search — AST pattern matching to find specific code patterns like .unwrap() calls, new instantiations, or custom patterns
  • lsp_goto_definition — Jump to a symbol's definition (requires --with-lsp flag and language server)
  • lsp_find_references — Find all usages of a symbol across the workspace (requires --with-lsp)
  • lsp_hover — Get type information and documentation for a symbol (requires --with-lsp)
  • lsp_document_symbols — List symbols in a file (requires --with-lsp)
  • lsp_workspace_symbols — Search for symbols across the entire workspace (requires --with-lsp)
  • lsp_completion — Get code completions (requires --with-lsp)

Use cases

  • Onboard new developers by asking your AI assistant to explain how authentication, payment processing, or other key systems work
  • Find all files and call sites that depend on a specific module or function to understand impact before refactoring
  • Identify error handling patterns and potential panics across your codebase to improve reliability
  • Review PRs by having your AI assistant analyze changes in context of the full dependency graph
  • Search for code by meaning rather than keywords—e.g., 'database connection pooling' instead of searching for 'pool' or 'connection'

Octocode MCP server FAQ

What is Octocode?

Octocode is an MCP server that indexes your codebase using tree-sitter AST parsing to build a live knowledge graph of files, symbols, imports, and dependencies. It exposes semantic search, code navigation, and structural queries to AI assistants like Claude and Cursor.

Is Octocode free?

Yes, Octocode is open source under Apache 2.0. However, semantic search requires an embedding API key (Voyage AI offers 200M free tokens/month; OpenAI, Jina, and Google embeddings are also supported).

How do I install Octocode in Claude Desktop or Cursor?

Install the Octocode binary (via curl, Homebrew, or cargo), then add it to your MCP config: {"mcpServers": {"octocode": {"command": "octocode", "args": ["mcp", "--path", "/your/project"]}}}. See the MCP Client Setup Guide for detailed instructions for Claude Desktop, Cursor, Windsurf, and 15+ other clients.

Do I need to set up embeddings or an LLM?

Semantic search requires an embedding API key (Voyage, OpenAI, Jina, or Google). The live graph and structural search work without any external services. Optional LLM integration (OpenRouter) adds code descriptions and commit message analysis.

What languages does Octocode support?

16 languages including Rust, Python, TypeScript/JavaScript, Go, PHP, C++, Ruby, Java, Swift, Svelte, Lua, CSS, JSON, Bash, and Markdown with full tree-sitter AST parsing.

Can Octocode work offline?

The live graph and structural search work fully offline. Semantic search requires an embedding API call, but all processing happens locally—your code never leaves your machine.

README (reference)

Source of truth, from the repository.

<div align="center"> <img src="https://raw.githubusercontent.com/Muvon/octocode/master/logo.svg" width="240" alt="Octocode">

Structural Code Intelligence for AI Agents — MCP Server + Knowledge Graph + Semantic Search

GitHub stars License Rust Release

Give your AI assistant a brain for your codebase. Octocode transforms your project into a navigable knowledge graph that Claude, Cursor, and other AI agents can search, understand, and navigate.

🚀 Quick Start • 🤖 MCP Integration • 📖 Documentation • 🌐 Website

<a href="https://glama.ai/mcp/servers/Muvon/octocode"> <img width="300" src="https://glama.ai/mcp/servers/Muvon/octocode/badge" alt="Octocode MCP server" /> </a> </div>

🤖 Built for AI Agents

The Problem: AI assistants are blind to your codebase. They can't search your files, understand dependencies, or remember context across sessions.

The Solution: Octocode's MCP server gives AI agents:

  • 🔍 Semantic search — Find code by meaning, not keywords
  • 🕸️ Knowledge graph — Navigate imports, calls, and dependencies
  • 📝 Code signatures — View structure without reading entire files
  • 🧭 LSP precision — Go-to-definition, find-references, and hover docs via your language server

Works with: Claude Desktop • Cursor • Windsurf • Any MCP-compatible AI

// Add to your AI assistant config
{
  "mcpServers": {
    "octocode": {
      "command": "octocode",
      "args": ["mcp", "--path", "/your/project"]
    }
  }
}

Now your AI assistant can:

You: "Where is authentication handled?"
AI: *searches your codebase* "Authentication is in src/middleware/auth.rs,
    which imports jwt.rs for token validation and calls user_store.rs for lookup."

You: "What files depend on the payment module?"
AI: *queries knowledge graph* "src/api/handlers/payment.rs imports payment/mod.rs,
    which is also used by src/workers/refund.rs and src/cron/billing.rs"

You: "Find every call site of this function"
AI: *uses LSP find-references* "process_payment() is called from 4 places:
    checkout.rs:87, refund.rs:134, billing.rs:56, and tests/payment_test.rs:23"

🤔 Why Octocode?

Standard RAG treats your code as flat text chunks. It finds similar-sounding snippets but has no idea that auth_middleware.rs imports jwt.rs, calls user_store.rs, and is wired into router.rs. Octocode understands structure.

# Semantic search finds the right code
octocode search "authentication middleware"
→ src/middleware/auth.rs | Similarity 0.923

# The GraphRAG CLI queries the optional persisted graph
octocode config --graphrag-enabled true
octocode index
octocode graphrag get-relationships --node-id src/middleware/auth.rs
Outgoing:
  imports → jwt (src/auth/jwt.rs): token validation logic
  calls   → user_store (src/db/user_store.rs): user lookup by token
Incoming:
  imports ← router (src/router.rs): wires auth into the request pipeline

Octocode uses tree-sitter AST parsing to build a live graph of files, symbols, imports, calls, inheritance, and implementations. The MCP graphrag tool builds this graph lazily from the current source tree, without an index, embeddings, or an LLM. Optional indexed GraphRAG adds semantic file discovery, descriptions, and broader architectural relationships.

🔬 How It Works

Current Source → Tree-sitter AST → Live Symbol Graph ──────────────→ MCP `graphrag`
                                           ↑                              ↑
Indexed Code → Embeddings + Optional LLM → Persisted File Enrichment ─────┘
  1. Live AST Graph — tree-sitter extracts file and symbol nodes plus deterministic contains, imports, calls, extends, and implements relationships directly from current source
  2. Always-on Graph Navigation — MCP graph lookup, relationship traversal, path finding, and overview work with [graphrag].enabled = false
  3. Optional Enrichment — enabling indexed GraphRAG overlays semantic file matches, LLM descriptions, and broader file-level architectural relationships; symbols are never embedded or LLM-generated
  4. Hybrid Search — semantic similarity + BM25 full-text search + reranking handles meaning-based code retrieval separately
  5. MCP Server — exposes semantic_search, view_signatures, graphrag, and structural_search to any MCP-compatible client

✨ What Makes It Different

Standard RAGDoc Lookup ToolsOctocode
IndexesText chunksExternal library docsYour codebase structure (AST)
UnderstandsSimilar textAPI specs & usageFunctions, imports, dependencies
Cross-fileNoNoYes — navigates the dependency graph
RelationshipsNoNoimports, calls, implements, extends...
AI integrationVariesMCPNative MCP server + LSP

Doc tools give AI the manual for libraries you use. Octocode gives AI the blueprint of how you put them together.

Built with Rust for performance. Local-first for privacy. Open source (Apache 2.0) for transparency.

📊 Retrieval Quality

Octocode ships a reproducible retrieval benchmark (benchmark/): 127 curated code-search queries with line-range ground truth, run against octocode's own source (pinned at b1771ba so annotations never drift). The numbers below use a fully local, no-API-key stack — jina-embeddings-v2-base-code via fastembed, no reranker — so they are a floor, not a ceiling:

ConfigHit@5Hit@10MRRNDCG@10Recall@10
Dense vector only0.5980.7170.4850.5280.671
Hybrid, default RRF weights (0.7/0.3)0.5980.7170.4850.5280.671
Hybrid, keyword-tuned (0.3/0.7)0.7320.8350.5720.6200.807

Tilting RRF fusion toward the BM25/keyword signal — which carries disproportionate weight for code's exact identifiers — lifts Hit@5 by +22% and Recall@10 by +20% at zero added cost.

The benchmark also flags what doesn't help here (full 6-variant matrix in benchmark/RESULTS.md): a generic local cross-encoder reranker (bge-reranker-base) actually regressed results (Hit@5 0.732 → 0.598) — code retrieval needs a code-aware reranker (e.g. voyage:rerank-2.5), not an off-the-shelf one.

git worktree add /tmp/corpus b1771ba        # pin the corpus to the ground-truth commit
CORPUS=/tmp/corpus python3 benchmark/run_matrix.py

See benchmark/README.md for methodology and metric definitions.

🚀 Quick Start

1. Install

# Universal installer (Linux, macOS, Windows)
curl -fsSL https://raw.githubusercontent.com/Muvon/octocode/master/install.sh | sh

# macOS with Homebrew
brew install muvon/tap/octocode
<details> <summary><strong>Other installation methods</strong></summary>
# Cargo (build from source)
cargo install --git https://github.com/Muvon/octocode

# Download binary from releases
# https://github.com/Muvon/octocode/releases

See Installation Guide for platform-specific instructions.

</details>

2. Set Up API Keys

# Required: Embedding provider (Voyage AI has 200M free tokens/month)
export VOYAGE_API_KEY="your-voyage-api-key"

# Optional: LLM for commit messages, code review
export OPENROUTER_API_KEY="your-openrouter-api-key"

Get your Voyage API key: voyageai.com (free tier available)

<details> <summary><strong>Other embedding providers</strong></summary>

Octocode supports multiple embedding providers:

# OpenAI
export OPENAI_API_KEY="your-key"
octocode config --code-embedding-model "openai:text-embedding-3-small"

# Jina AI
export JINA_API_KEY="your-key"
octocode config --code-embedding-model "jina:jina-embeddings-v3"

# Google
export GOOGLE_API_KEY="your-key"
octocode config --code-embedding-model "google:text-embedding-005"

See API Keys guide for all supported providers.

</details>

3. Index Your Codebase

cd /your/project
octocode index
# → Indexed 12,847 blocks across 342 files

4. Search Your Code

# Natural language search
octocode search "authentication middleware"

# Multi-query for broader results
octocode search "auth" "middleware" "session"

# Filter by language
octocode search "database connection pool" --lang rust

# Search commit history
octocode search "authentication refactor" --mode commits

5. Connect Your AI Assistant

Add to your MCP client config (Claude Desktop, Cursor, Windsurf):

{
  "mcpServers": {
    "octocode": {
      "command": "octocode",
      "args": ["mcp", "--path", "/your/project"]
    }
  }
}

Done! Your AI assistant now understands your codebase structure.

🔌 MCP Server Integration

Octocode includes a built-in MCP server that exposes your codebase as tools to AI assistants. This is the primary way to use Octocode — give your AI assistant direct access to search and navigate your code.

Available Tools

ToolWhat It Does
semantic_searchFind code by meaning — "authentication flow", "error handling", "database queries"
view_signaturesView file structure — function signatures, class definitions, imports
graphragAlways-on file/symbol graph — search nodes, inspect relationships, and find paths without indexing
structural_searchAST pattern matching — find .unwrap() calls, new instantiations, specific patterns
lsp_goto_definitionJump to a symbol's definition (requires --with-lsp)
lsp_find_referencesFind all usages of a symbol across the workspace (requires --with-lsp)
lsp_hoverType info and documentation for a symbol (requires --with-lsp)
lsp_document_symbols / lsp_workspace_symbols / lsp_completionFile symbols, workspace-wide symbol search, completions (requires --with-lsp)

Enable the LSP tools by starting the server with your language server:

octocode mcp --path /your/project --with-lsp="rust-analyzer"

Conversational AI Examples

Once connected, your AI assistant can answer questions about your codebase:

You: "Where is user authentication implemented?"
AI: *uses semantic_search* "Found in src/auth/login.rs. The authenticate() function
    validates credentials against the database, generates a JWT token, and stores
    the session in Redis."

You: "What files depend on the payment module?"
AI: *uses graphrag* "src/api/handlers/payment.rs imports payment/mod.rs, which is also
    used by src/workers/refund.rs and src/cron/billing.rs. The payment module exports
    process_payment() and validate_transaction() functions."

You: "Show me all error handling in the API layer"
AI: *uses structural_search* "Found 23 error handling patterns in src/api/:
    - 15 use Result<T, ApiError> with explicit error types
    - 8 use .unwrap() (potential panics in handlers/user.rs:42, handlers/auth.rs:87)
    - 3 use .expect() with custom messages"

Quick Setup

Octomind (Recommended) — Zero setup, Octocode pre-configured:

curl -fsSL https://raw.githubusercontent.com/muvon/octomind/master/install.sh | bash
octomind run developer:rust

Claude Code (CLI) — Command-line setup:

claude mcp add octocode -- octocode mcp --path /path/to/your/project

Claude Desktop / Cursor / Windsurf — Add to config:

{
  "mcpServers": {
    "octocode": {
      "command": "octocode",
      "args": ["mcp", "--path", "/path/to/your/project"]
    }
  }
}

Config locations:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
  • Cursor: ~/.cursor/mcp.json or Settings → MCP Servers
  • Windsurf: Settings → MCP

📖 Complete MCP Client Setup Guide — Detailed instructions for 15+ clients including VS Code (Cline/Continue), Zed, Replit, and more.

🎯 What Can You Do With It?

New developer onboarding:

You: "How does the authentication system work?"
AI: *searches and navigates* "Authentication starts in src/middleware/auth.rs which
    validates JWT tokens. It calls src/auth/jwt.rs for token verification, which uses
    the public key from config. Failed auth returns 401 via src/errors/auth_error.rs.
    Sessions are stored in Redis via src/cache/session.rs."

Code archaeology:

You: "Find all places we handle database errors"
AI: *structural search* "Found 47 error handling patterns:
    - 32 use Result<T, DbError> with proper error types
    - 15 use .unwrap() (potential issues in src/db/user.rs:23, src/db/order.rs:156)
    - Recommend adding proper error handling to those locations"

Refactoring with confidence:

You: "What depends on the PaymentProcessor trait?"
AI: *queries graph* "src/api/handlers/checkout.rs, src/workers/refund_worker.rs,
    and src/cron/billing.rs all depend on PaymentProcessor. The trait is defined
    in src/domain/payment.rs and implemented by src/infrastructure/stripe.rs
    and src/infrastructure/paypal.rs."

Code review assistance:

You: "Review this PR for security issues"
AI: *analyzes changes* "The PR adds password hashing in src/auth/hash.rs. However,
    it uses SHA256 which is fast and vulnerable to brute force. Recommend using
    bcrypt or argon2 instead. Also found 3 instances of .unwrap() that could panic
    in production."

🌐 Supported Languages

16 languages with full tree-sitter AST parsing:

LanguageExtensionsFeatures
Rust.rsFull AST parsing, pub/use detection, module structure
Python.pyImport/class/function extraction, docstring parsing
TypeScript/JavaScript.ts, .tsx, .js, .jsxES6 imports/exports, type definitions
Go.goPackage/import analysis, struct/interface parsing
PHP.phpClass/function extraction, namespace support
C++.cpp, .cc, .cxx, .c++, .c, .h, .hpp, .hxx, .cppm, .ixx, .mxx, .ccm, .cxxmInclude analysis, class/function extraction, C++20 module support
Ruby.rbClass/module extraction, method definitions
Java.javaImport analysis, class/method extraction
Swift.swiftClass/struct/protocol extraction, import analysis
Svelte.svelteComponent structure, script/style block extraction
Lua.luaFunction and table extraction
CSS.cssRule and selector extraction
JSON.jsonStructure analysis, key extraction
Bash.sh, .bashFunction and variable extraction
Markdown.mdDocument section indexing, header extraction

📚 Documentation

🔒 Privacy & Security

  • 🏠 Local-first — local embedding models available on supported platforms (macOS ARM default builds); cloud providers on all platforms
  • 🔐 Secure — API keys stored locally, env vars supported
  • 🚫 Respects .gitignore — Never indexes sensitive files
  • 🛡️ MCP security — Local-only server, no external network for search
  • 📤 Cloud-safe — Embeddings process only metadata, never source code
<details> <summary><strong>📊 Retrieval Quality Benchmark</strong></summary>

We measure semantic search quality using a hand-annotated ground truth dataset of 254 queries (127 code + 127 docs) with precise line-range annotations. Each query has 1–3 expected results scored by relevance.

Tested on commit b1771ba with benchmark config (contextual retrieval, Voyage reranker, RaBitQ quantization).

<details> <summary><strong>Documentation search</strong> (<code>--mode docs</code>) — Hit@10: 0.953, MRR: 0.776</summary>
MetricScore
Hit@50.929 (118/127)
Hit@100.953 (121/127)
MRR0.776
NDCG@100.801
Recall@50.902
Recall@100.921

Missed queries (6 of 127):

#QueryExpectedGot (top 1)
43how to set up MCP proxy for managing multiple repositoriesdoc/MCP_INTEGRATION.md:286-311doc/MCP_INTEGRATION.md:286-4
51what are the prerequisites before using octocodedoc/GETTING_STARTED.md:6-12doc/CONTRIBUTING.md:7-33
59what to do when hitting API rate limitsdoc/GETTING_STARTED.md:209-216doc/PERFORMANCE.md:304-356
75typical performance metrics for small medium and large projectsdoc/PERFORMANCE.md:4-13doc/PERFORMANCE.md:414-14
112how to install octocode on different operating systemsINSTALL.md:4-14INSTALL.md:49-70
115how to fix macOS Gatekeeper blocking the binaryINSTALL.md:199-206INSTALL.md:198-119
</details> <details> <summary><strong>Code search</strong> (<code>--mode code</code>) — Hit@10: 0.992, MRR: 0.895</summary>
MetricScore
Hit@50.992 (126/127)
Hit@100.992 (126/127)
MRR0.895
NDCG@100.906
Recall@50.962
Recall@100.974

Missed queries (1 of 127):

#QueryExpectedGot (top 1)
105how does the system ensure two developers get the same database pathsrc/storage.rs:60-83src/mcp/proxy.rs:631-644
</details>

Metrics: Hit@k (did the answer appear?), MRR (how high?), NDCG@10 (are best results ranked first?), Recall@k (how many found?). See benchmark/ for methodology, scoring script, and the full dataset.

</details>

🤝 Community & Support

⚖️ License

Apache License 2.0 — See LICENSE for details.


<div align="center">

Built with 🦀 Rust by Muvon in Hong Kong

⭐ Star • 🍴 Fork • 📣 Share

</div>

mcp-name: io.github.Muvon/octocode

Related MCP servers

OCOctofs logo

Octofs

Active

Standalone Rust MCP server giving AI assistants filesystem superpowers—read, edit, search, and execute commands.

11
Rust
Apache-2.0
View repository →
OCOctobrain logo

Octobrain

Active

Persistent memory for AI assistants with semantic search and knowledge graph relationships.

11
Rust
Apache-2.0
View repository →

Dubstrata: Causal Financial & Narrative CDN providing Graph RAG & Deep Research Reports

View repository →
MYMyTelescope logo

MyTelescope

Maintained

MyTelescope demand intelligence: signals, forecasts, competitor share, and emerging trends.

0
View repository →

Cleared Check before pay: lookup_merchant, cleared_check, route_gateway for x402 agents.

View repository →

MCP server for Proxmox VE management (VM, LXC, nodes)

0
TypeScript
MIT
View repository →