| Crates.io | kadabra-runes |
| lib.rs | kadabra-runes |
| version | 0.1.0 |
| created_at | 2026-01-06 09:37:34.672724+00 |
| updated_at | 2026-01-06 09:37:34.672724+00 |
| description | MCP server bridging LLM applications with language servers for semantic code navigation |
| homepage | https://github.com/kadabra-ai/kadabra-runes |
| repository | https://github.com/kadabra-ai/kadabra-runes |
| max_upload_size | |
| id | 2025505 |
| size | 170,107 |
A Model Context Protocol (MCP) server that provides semantic code navigation for Rust projects through the Language Server Protocol (LSP). Enables LLM applications like Claude Code to intelligently navigate codebases using rust-analyzer.
# Install
cargo install --path .
# Run for your Rust project
kadabra-runes --workspace /path/to/your/project
🔌 Want to use with Claude Desktop, ChatGPT, or other LLM apps? See INSTALL.md for step-by-step integration guides.
Provides 9 powerful navigation tools backed by rust-analyzer:
┌─────────────────────────┐
│ LLM Application │
│ (Claude Code, etc.) │
└───────────┬─────────────┘
│ MCP Protocol (stdio)
│ JSON-RPC
▼
┌─────────────────────────┐
│ Kadabra Runes Server │
│ - MCP Tool Router │
│ - Response Formatter │
└───────────┬─────────────┘
│ LSP Protocol (stdio)
│ JSON-RPC
▼
┌─────────────────────────┐
│ rust-analyzer │
│ - Type Inference │
│ - Symbol Resolution │
│ - Call Graph Analysis │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ Rust Codebase │
└─────────────────────────┘
📖 For detailed installation instructions for Claude Desktop, Claude Code, ChatGPT Desktop, Gemini CLI, and Codex CLI, see INSTALL.md
rustup component add rust-analyzer)git clone https://github.com/kadabra-ai/kadabra-runes.git
cd kadabra-runes
cargo build --release
The binary will be available at target/release/kadabra-runes.
cargo install --path .
Start the MCP server for a Rust workspace:
kadabra-runes --workspace /path/to/your/rust/project
The server will:
kadabra-runes [OPTIONS]
Options:
-w, --workspace <PATH>
Workspace root directory to navigate
[default: .]
-l, --language-server <CMD>
Language server command to use
[default: rust-analyzer]
--language-server-args <ARGS>...
Arguments to pass to the language server
--log-level <LEVEL>
Log level: trace, debug, info, warn, error
[default: info]
-h, --help
Print help information
-V, --version
Print version information
# Navigate current directory
kadabra-runes
# Specify workspace
kadabra-runes --workspace ~/projects/my-rust-app
# Enable debug logging
kadabra-runes --log-level debug
# Use custom rust-analyzer
kadabra-runes --language-server /usr/local/bin/rust-analyzer
Add to your MCP configuration:
{
"mcpServers": {
"kadabra-runes": {
"command": "kadabra-runes",
"args": ["--workspace", "/path/to/workspace"],
"type": "stdio"
}
}
}
Find Definition:
{
"name": "goto_definition",
"arguments": {
"file_path": "/path/to/src/main.rs",
"line": 42,
"column": 15
}
}
Search Symbols:
{
"name": "workspace_symbols",
"arguments": {
"query": "HashMap",
"max_results": 20
}
}
Get Hover Info:
{
"name": "hover",
"arguments": {
"file_path": "/path/to/src/lib.rs",
"line": 10,
"column": 5
}
}
Responses are formatted for optimal LLM consumption:
/path/to/file.rs:42:5
40 | fn example() {
41 | let x = 10;
> 42 | process(x);
43 | println!("Done");
44 | }
[function] main - /path/to/main.rs:15
[struct] Config - /path/to/config.rs:8
[method] new (in Config) - /path/to/config.rs:12
[struct] KadabraRunes (line 29)
[field] workspace_root (line 31)
[field] lsp_client (line 33)
[method] new (line 43)
[method] workspace_root (line 51)
```rust
pub fn goto_definition(&self, path: &Path, line: u32, column: u32) -> LspResult<GotoDefinitionResponse>
```
Gets the definition location(s) for the symbol at the given position.
# Arguments
* `path` - File path containing the symbol
* `line` - Line number (1-indexed)
* `column` - Column number (1-indexed)
# Debug build
cargo build
# Release build
cargo build --release
# Check without building
cargo check
cargo test
# Integration tests MUST run single-threaded
cargo test --test integration_test -- --test-threads=1
cargo test --test integration_test test_goto_definition -- --test-threads=1
RUST_LOG=debug cargo test --test integration_test -- --test-threads=1 --nocapture
kadabra-runes/
├── src/
│ ├── main.rs # CLI entry point
│ ├── lib.rs # Library exports
│ ├── error.rs # Error types
│ ├── mcp/
│ │ ├── mod.rs # MCP module
│ │ ├── server.rs # MCP server and tool implementations
│ │ ├── tools.rs # Tool parameter and response types
│ │ └── transport.rs # Transport abstractions
│ └── lsp/
│ ├── mod.rs # LSP module
│ ├── client.rs # LSP client implementation
│ └── types.rs # Helper types and conversions
├── tests/
│ ├── integration_test.rs # Integration tests
│ └── fixtures/ # Test Rust project
├── Cargo.toml # Dependencies and metadata
├── REQUIREMENTS.md # Detailed requirements
└── README.md # This file
workspace_symbols insteadEnsure rust-analyzer is installed:
rustup component add rust-analyzer
Or install manually:
# macOS/Linux
brew install rust-analyzer
# Or download from GitHub releases
rust-analyzer may be indexing a large workspace. Check logs:
kadabra-runes --log-level debug
Cargo.tomlMake sure to run with single thread:
cargo test --test integration_test -- --test-threads=1
Contributions are welcome! Please:
git checkout -b feature/amazing-feature)cargo test)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ for the Rust and LLM communities