CodeIntel MCP Server
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., "@CodeIntel MCP Serverexplain the TCustomConnection class"
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.
π§ CodeIntel
A local-first, hybrid (semantic + keyword) code-intelligence tool for Delphi/Pascal codebases β and ~45 other languages β with a RAG chat panel and a 17-tool MCP server for AI coding agents.
πΉπ· TΓΌrkΓ§e Β· Contributing Β· Code of Conduct Β· Security Β· Acknowledgments

π Index
Related MCP server: codecortex
π‘ What is this project?
CodeIntel is not an AI-behavior rules kit β it's a real, running application: a FastAPI backend + Qdrant vector database + Ollama local LLM, wired together into a code-search-and-understanding tool that grew out of indexing large Delphi libraries (UniDAC, ~25,000 chunks) and now generalizes to dozens of languages.
It answers questions a codebase search box normally can't:
β Hybrid search β dense (semantic) + sparse (BM25 keyword) fusion via Qdrant's RRF, with name-match boosting and an optional cross-encoder rerank pass
β RAG chat with real citations β "Cevapla" mode answers from the top-K matches; "Derin" (deep research) mode pulls the full body of the primary symbol plus its callers/callees/type-hierarchy/unit-dependencies into one context pack before answering
β Agent-ready via MCP β 17 tools (search, explain, relations, impact analysis, context packs...) served over stdio and LAN-exposed Streamable HTTP, so Claude Code/Codex CLI/Gemini CLI can query the same index the web panel uses
β Self-documenting β generates a full multi-chapter HTML/PDF/DOCX manual per collection, with AI-assisted TR/EN translation
Say goodbye to
grep-and-hope across a 25,000-chunk Delphi codebase, or asking an AI agent to "explain this" with zero context beyond the file you happened to have open.
π€ Why use it?
Without CodeIntel | With CodeIntel |
| Hybrid dense+sparse search, Turkish query β English/Delphi code both work |
An AI agent sees only the file you pasted | MCP tools give it the full call graph, type hierarchy, and unit dependencies on request |
"Which of these 6 near-duplicate | The comparison table asks the LLM to score stability/performance for every candidate, side by side |
Re-reading old commits to understand why code changed |
|
Manually writing/maintaining developer docs |
|
π Core Capabilities

Hybrid RRF search across multiple collections at once, with per-language filters, cross-encoder reranking, and a "why this ranked here" breakdown per result.
RAG chat (
/api/ask,/api/ask/stream) and deep research (/api/research/stream, token-budgeted context packs) β both SSE-streamed, both cached, both truncation-aware (surfaces Ollama's owndone_reasoninstead of silently returning a cut-off answer).Function comparison table (
/api/compare) β when a query surfaces several implementations doing the same job, one LLM call scores each for stability/performance with a one-line rationale.Symbol graph β inheritance,
find_references, caller/callee edges, stored in its own internal collection (not embedded in every point's payload, so it scales independently of the code collection's size).Git provenance + impact analysis β correlate a commit range against the chunks it touched.
Auto-generated manual β per-collection HTML/PDF/DOCX documentation, collapsible class-tree sidebar, self-hosted syntax highlighting (no CDN dependency), AI-assisted bilingual (TR/EN) translation.
Duplicate-code detection β threshold-based similarity scan over already-indexed embeddings (no re-embedding needed).
Atomic, resumable indexing β staging+alias generation model (reindex builds in a separate collection, only swapped in atomically once complete and verified), persistent job queue survives a restart mid-index.
Owner/Group registry, API keys with read/admin role separation, rate limiting, audit log β the same panel supports single-operator local use and LAN-shared multi-key access.
π Supported Languages
A generic Tree-sitter-based engine covers ~45 languages structurally; 8 languages have deep support (parent/child AST splitting for nested class methods, uses/import extraction, unit-head parsing): Delphi/Pascal, Python, C#, C/C++, Java, JavaScript/TypeScript, Go, Rust.
π€ MCP Tools (for AI Agents)
src/mcp_server.py exposes 17 tools over stdio (default) and optionally LAN-facing Streamable HTTP β every tool also has a REST test endpoint under /api/mcp/* (parity enforced by tests/test_api.py::test_mcp_rest_parity), tried live from static/api.html.
Tool | Purpose |
| Hybrid search with language/kind/unit filters |
| Nearest neighbors of a given chunk |
| Full content of a source file (unit) |
| A single chunk's full payload |
| Caller/callee/same-file relations |
| Fast or deep LLM explanation (cached) |
| LLM code review of a chunk |
| Show-only diff suggestion (never auto-applies) |
| Route a question to a domain-specific model (e.g. SQL) |
| Ancestors/descendants of a type |
| All references to a name across a collection |
| Correlate a git diff range with affected chunks |
|
|
| Token-budgeted, multi-source context bundle for a task |
| Generate/fetch cached documentation for a file |
| List configured domain-specific models |
| List indexed collections and their stats |
π Project Structure
code-intel/
β
βββ src/
β βββ retrieval.py # Core search/RAG/explain logic β shared by panel AND mcp_server, never duplicated
β βββ chunker.py # Tree-sitter multi-language chunking
β βββ manual.py # Documentation generator (HTML/PDF/DOCX, i18n)
β βββ mcp_server.py # 17 MCP tools, stdio + Streamable HTTP
β βββ panel.py # FastAPI app entrypoint + security_guard middleware
β βββ api/ # Modular routers: search, index, admin, manual, mcp
β βββ services/ # Shared state, profiles, API keys, backups, indexing pipeline
β
βββ static/
β βββ index.html # Search + chat panel
β βββ settings.html # Collection/index management
β βββ api.html # REST + MCP tool tester
β βββ viewer.html # Standalone file viewer
β
βββ tests/ # pytest β most tests need a live Qdrant (@needs_qdrant, skip not fail)
βββ tools/ # start-system.ps1 / stop-system.ps1 / install-autostart.ps1
βββ qdrant-bin/ # Qdrant binary (Windows)
βββ mcp-config.json # MCP server defaults (Qdrant/Ollama URLs, model names)
βββ requirements.txt # Pinned dependency versions (see the onnxruntime-gpu note inside)
βββ pyproject.tomlNot included in this copy:
data/(Qdrant storage + chunk caches),.venv/,backups/,logs/β all regenerated locally, all.gitignored.
π§ Prerequisites
Python 3.12+
Qdrant (bundled binary under
qdrant-bin/, or run your own)Ollama β for chat, deep research, explanations, translation, and the comparison table
PowerShell 7+ (
pwsh) βtools/start-system.ps1/stop-system.ps1are PowerShell scripts (Windows-first; the Python/FastAPI core itself is cross-platform)A CUDA-capable GPU is optional but strongly recommended for embedding throughput (see
requirements.txt'sonnxruntime-gpupinning note)
β‘ Quick Start
# 1. Install dependencies (pinned versions β see requirements.txt's onnxruntime-gpu note)
uv pip install -r requirements.txt --python .venv/Scripts/python.exe
# 2. Start Qdrant + Ollama + the panel (Windows)
pwsh tools/start-system.ps1 -NoBrowserThen open http://127.0.0.1:8500 β index a folder from Settings, then search/chat from the main page. To use it as an MCP server instead of (or alongside) the panel, point your AI CLI's MCP config at src/mcp_server.py (stdio) β see mcp-config.json for the defaults it reads (Qdrant/Ollama URLs, fast/deep model names).
pytest tests/ -q # needs a live Qdrant (tools/start-system.ps1) for most tests; the rest skip cleanlyπ Security Posture
Binds to 127.0.0.1 by default; LAN exposure is opt-in via role-separated API keys (read/admin). See SECURITY.md for the full threat model, including two fixes worth knowing about if you're auditing this codebase: a client-controlled outbound-URL (SSRF) restriction added 2026-07-25, and an HTML/JS-context-aware escaping fix for the same date (plain &<>-only escaping is not sufficient inside an onclick="fn('...')" attribute β see escJs()/_esc_js()).
π― Design & Philosophy

Verify, don't assume. Every fix recorded in this codebase's git history β the SSRF restriction, the escaping fix, the atomic-import redesign, the check-then-set race fix β was proven with a test that fails against the old code and passes against the new, not just reasoned about and left untested. The same discipline extends to search ranking (tests/eval.py's golden-query benchmark) and to answers themselves (both chat modes report Ollama's own truncation signal rather than presenting a silently cut-off response as complete). The deliberate tradeoff: slower to ship a fix than "looks right on read," in exchange for a codebase where "the tests pass" actually means something.
π Acknowledgments
See ACKNOWLEDGMENTS.md / ACKNOWLEDGMENTS.tr-TR.md for the open-source projects and models this tool is built on.
π€ Contributing
See CONTRIBUTING.md / CONTRIBUTING.tr-TR.md.
Made with care by Emrah BAΕPINAR & Recep Eymen BAΕPINAR.
Contributing Β· Code of Conduct Β· Security Β· Acknowledgments
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/SecondLifes/code-intel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server