Skip to main content
Glama

CodeCortX-MCP

CodeCortXMCP Server

A lightning-fast, language-agnostic code analysis MCP (Model Context Protocol) server built in Rust. Provides instant symbol lookups, reference tracking, and semantic code search for large codebases with performance as a first-class citizen.

Rust License Tests

๐Ÿš€ Features

  • โšก High Performance: <1ms symbol lookups, >100 files/sec indexing

  • ๐Ÿ”’ Lock-free Concurrency: No blocking operations, handles concurrent requests efficiently

  • ๐Ÿง  Smart Caching: Binary persistence with <1s startup for previously indexed repositories

  • ๐Ÿ“Š Memory Management: Automatic LRU eviction with configurable memory limits

  • ๐Ÿ”„ Incremental Updates: File watching with SHA-256 change detection

  • ๐ŸŒ Multi-language: 15+ languages supported with extensible architecture

  • ๐Ÿ›ก๏ธ Error Resilient: Graceful handling of malformed code and I/O errors

  • ๐Ÿ” Full-text Search: BM25 statistical search through all code content

๐Ÿ—๏ธ Architecture

  • Language: Rust (performance + safety)

  • Parser: Tree-sitter (consistent, incremental parsing)

  • Storage: In-memory DashMap + binary persistence

  • Concurrency: Lock-free data structures

  • Protocol: MCP over JSON-RPC stdio

๐Ÿ“‹ MCP Tools

The server provides 7 MCP tools for comprehensive code analysis:

1. index_code

Index source code files to build symbol table for fast lookups.

{ "path": "/path/to/project" }

2. get_symbol

Retrieve symbol information by name with optional source code inclusion.

{ "name": "function_name", "include_source": true }

3. get_symbol_references

Find all references to a symbol across the codebase.

{ "name": "symbol_name" }

4. find_symbols

Search symbols by query using exact match or fuzzy search with optional type filtering.

{ "query": "test_", "symbol_type": "function" }

5. code_search ๐ŸŽฏ

BM25 statistical search through all indexed code content.

{ "query": "fibonacci algorithm", "max_results": 10 }

Perfect for finding:

  • Algorithm implementations: "binary search algorithm"

  • Error handling patterns: "error handling try catch"

  • Database code: "database connection pool"

  • Specific functionality: "file upload validation"

6. get_file_outline ๐Ÿ“„

Get structured outline of symbols in a specific file.

{ "file_path": "/path/to/file.rs" }

Returns organized view of:

  • Classes/Structs with signatures

  • Functions/Methods with full signatures and parameters

  • Constants, Enums, Interfaces, Modules, Imports, Variables

  • Line numbers and visibility (pub/priv)

7. get_directory_outline ๐Ÿ“

Get high-level overview of symbols across a directory.

{ "directory_path": "/path/to/project", "includes": ["functions", "methods", "constants"] }

Perfect for:

  • Project structure understanding

  • API surface discovery

  • Architecture overview

  • Code navigation

๐Ÿ› ๏ธ Installation & Setup

Prerequisites

  • Rust 1.70+ with Cargo

  • Git

Building from Source

git clone https://github.com/kensave/codecortx-mcp.git cd codecortx-mcp cargo build --release

The binary will be available at target/release/codecortx-mcp.

๐Ÿ”ง Usage

With Amazon Q CLI

  1. Add to Amazon Q CLI Configuration

    Add the following to your Amazon Q CLI MCP configuration:

    { "mcpServers": { "codecortx": { "command": "/path/to/codecortx-mcp/target/release/codecortx-mcp", "args": [] } } }
  2. Restart Amazon Q CLI

  3. Start Using

    In Amazon Q CLI, you can now ask questions like:

    • "Index the code in my project directory"

    • "Find all functions that contain 'parse' in their name"

    • "Show me all references to the SymbolStore struct"

    • "Get the implementation of the extract_symbols function"

    • "Search for fibonacci algorithm implementations"

    • "Find error handling patterns in the codebase"

    • "Show me the outline of this file with all functions and their signatures"

    • "Get an overview of all classes and methods in this directory"

Testing with MCP Inspector

MCP Inspector is a great tool for testing and debugging MCP servers.

  1. Install MCP Inspector

    npx @modelcontextprotocol/inspector
  2. Test the Server

    # Run the server ./target/release/codecortx-mcp # In another terminal, run MCP Inspector npx @modelcontextprotocol/inspector ./target/release/codecortx-mcp
  3. Explore the Tools

    • View available tools and their schemas

    • Test tool calls with sample data

    • Inspect request/response cycles

    • Debug any integration issues

Manual Testing via Command Line

You can also test the server manually using stdio:

# Start the server ./target/release/codecortx-mcp # Send MCP initialization (paste this JSON) {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test-client", "version": "1.0.0"}}} # Send initialized notification {"jsonrpc": "2.0", "method": "notifications/initialized"} # List available tools {"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}} # Index a directory {"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "index_code", "arguments": {"path": "/path/to/your/project"}}} # Search for symbols {"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "find_symbols", "arguments": {"query": "main", "symbol_type": "function"}}} # Search code content with BM25 {"jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": {"name": "code_search", "arguments": {"query": "error handling", "max_results": 5}}} # Get file outline with signatures {"jsonrpc": "2.0", "id": 6, "method": "tools/call", "params": {"name": "get_file_outline", "arguments": {"file_path": "/path/to/file.rs"}}} # Get directory overview {"jsonrpc": "2.0", "id": 7, "method": "tools/call", "params": {"name": "get_directory_outline", "arguments": {"directory_path": "/path/to/project", "includes": ["functions", "classes"]}}}

โšก Performance Benchmarks

Run the included benchmarks to validate performance on your system:

# Run all benchmarks cargo bench # Run specific benchmark cargo bench -- symbol_lookup # Run performance validation tests cargo test --test performance_validation -- --nocapture

Expected Performance Targets:

  • Symbol lookups: <1ms average

  • Indexing speed: >100 files/second

  • Concurrent access: >50k lookups/second

  • Memory usage: <1GB for large repositories

๐Ÿงช Testing

The project includes comprehensive test coverage:

# Run all tests cargo test # Run unit tests only cargo test --lib # Run integration tests cargo test --test integration_test # Run performance validation cargo test --test performance_validation # Run with output for debugging cargo test -- --nocapture

Test Coverage:

  • 54 unit tests covering all core modules

  • 5 integration tests for end-to-end workflows

  • 5 performance tests validating requirements

  • 15 language-specific tests

  • 4 outline tool tests

Total: 83 tests passing

๐Ÿ” Supported Languages

Currently supports 15+ languages:

  • Rust (.rs): Functions, structs, enums, traits, implementations, constants, modules

  • Python (.py): Functions, classes, methods, variables, imports

  • JavaScript (.js): Functions, classes, methods, constants, variables

  • TypeScript (.ts): Functions, classes, interfaces, types, enums

  • Java (.java): Classes, methods, interfaces, enums, constants

  • Go (.go): Functions, structs, interfaces, constants, variables

  • C (.c): Functions, structs, enums, typedefs, variables

  • C++ (.cpp, .hpp): Classes, functions, namespaces, templates

  • Ruby (.rb): Classes, modules, methods, constants

  • PHP (.php): Classes, functions, methods, constants

  • C# (.cs): Classes, methods, interfaces, enums, properties

  • Kotlin (.kt): Classes, functions, interfaces, objects

  • Scala (.scala): Classes, objects, traits, functions

  • Swift (.swift): Classes, structs, protocols, functions

  • Objective-C (.m, .h): Classes, methods, protocols, categories

Adding New Languages: The architecture is designed for easy extension. To add a new language:

  1. Add Tree-sitter grammar dependency

  2. Create query files in queries/ directory

  3. Update Language enum and language detection

  4. Add to supported extensions

๐Ÿ’พ Caching & Persistence

  • Cache Location: Uses system cache directory (~/.cache/codecortext-mcp/ on Unix)

  • Cache Format: Custom binary format with bincode serialization

  • Cache Key: Based on repository path and last modification times

  • Cache Validation: Automatic validation on startup with incremental updates

  • Memory Management: LRU eviction when memory pressure detected (configurable)

๐Ÿ›ก๏ธ Error Handling

The server is designed for robustness:

  • Parse Errors: Continues indexing other files, logs issues

  • File System Errors: Graceful degradation with partial results

  • Memory Pressure: Automatic cleanup and eviction

  • Malformed Requests: Proper MCP error responses

  • Concurrent Access: Lock-free structures prevent deadlocks

๐Ÿ“Š Monitoring & Logging

The server uses structured logging with different levels:

# Enable debug logging RUST_LOG=debug ./target/release/codecortx-mcp # Enable trace logging for specific modules RUST_LOG=codecortx_mcp::indexer=trace ./target/release/codecortx-mcp

โš™๏ธ Configuration

Environment Variables

# Memory management export CODECORTEXT_MAX_MEMORY_MB=1024 export CODECORTEXT_EVICTION_THRESHOLD=0.8 # Cache location export CODECORTX_CACHE_DIR=~/.cache/codecortx-mcp # Logging export RUST_LOG=codecortx_mcp=info

๐Ÿค Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Run the test suite (cargo test)

  4. Run benchmarks to ensure no performance regression (cargo bench)

  5. Commit your changes (git commit -m 'Add amazing feature')

  6. Push to the branch (git push origin feature/amazing-feature)

  7. Open a Pull Request

๐Ÿ“ License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

๐Ÿ”ง Troubleshooting

Common Issues

  1. "Symbol not found" errors during compilation

    • Ensure you have the latest Rust toolchain: rustup update

    • Clean and rebuild: cargo clean && cargo build

  2. Server not responding in Amazon Q CLI

    • Check the config file path and syntax

    • Verify the binary path is correct and executable

    • Check Amazon Q CLI logs for error messages

  3. High memory usage

    • Configure memory limits via environment variables

    • The server will automatically evict least-recently-used files

    • Consider indexing smaller subdirectories for very large repositories

  4. Slow indexing performance

    • Check disk I/O performance

    • Ensure no antivirus is scanning files during indexing

    • Use SSD storage for better performance

Debug Commands

# Check server version and capabilities ./target/release/codecortx-mcp --version # Test basic functionality cargo test --test integration_test -- test_end_to_end_rust_indexing # Benchmark performance cargo test --test performance_validation -- --nocapture

๐Ÿ“š Documentation


Built with โค๏ธ in Rust for lightning-fast code analysis

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kensave/CodeCortX-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server