Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CodeCortX-MCPfind all references to the SymbolStore struct"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Roberto MCP
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.
π 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/roberto-mcp.git
cd roberto-mcp
cargo build --releaseThe binary will be available at target/release/roberto-mcp.
π§ Usage
With Amazon Q CLI
Add to Amazon Q CLI Configuration
Add the following to your Amazon Q CLI MCP configuration:
{ "mcpServers": { "roberto": { "command": "/path/to/roberto-mcp/target/release/roberto-mcp", "args": [] } } }Restart Amazon Q CLI
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
SymbolStorestruct""Get the implementation of the
extract_symbolsfunction""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.
Install MCP Inspector
npx @modelcontextprotocol/inspectorTest the Server
# Run the server ./target/release/roberto-mcp # In another terminal, run MCP Inspector npx @modelcontextprotocol/inspector ./target/release/roberto-mcpExplore 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/roberto-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 -- --nocaptureExpected 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 -- --nocaptureTest 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:
Add Tree-sitter grammar dependency
Create query files in
queries/directoryUpdate
Languageenum and language detectionAdd to supported extensions
πΎ Caching & Persistence
Cache Location: Uses system cache directory (
~/.cache/roberto-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/roberto-mcp
# Enable trace logging for specific modules
RUST_LOG=roberto_mcp::indexer=trace ./target/release/roberto-mcpβοΈ Configuration
Environment Variables
# Memory management
export ROBERTO_MAX_MEMORY_MB=1024
export ROBERTO_EVICTION_THRESHOLD=0.8
# Cache location
export ROBERTO_CACHE_DIR=~/.cache/roberto-mcp
# Logging
export RUST_LOG=roberto_mcp=infoπ€ Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Run the test suite (
cargo test)Run benchmarks to ensure no performance regression (
cargo bench)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
π License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
π§ Troubleshooting
Common Issues
"Symbol not found" errors during compilation
Ensure you have the latest Rust toolchain:
rustup updateClean and rebuild:
cargo clean && cargo build
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
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
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/roberto-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
Architecture Guide - Detailed system architecture
Development Guide - Setup and development workflow
API Reference - Complete MCP tool documentation
Built with β€οΈ in Rust for lightning-fast code analysis